e68891e698afe4b880e58faaite5b08fe5b08fe9b89f受博文视点周筠老师所邀,为博文新书 《我是一只IT小小鸟》(俗称“IT小小鸟”)写了篇从大学到现在的个人成长经历的文章。“IT小小鸟”全书由 胡江堂 / 李成 / 唐雅薇 / 秦琴 / 蒋宇东 / 刘未鹏 / 居振梁 / 刘帅 / 温卫斌 / 张弦 / 张凯峰 / 庄表伟 / 宋劲杉 / 程露 / 黄小明 / 易晓东 / 林健 / 高昂 / 徐宥 / 辜新星 / 简朝阳 共 21 位作者合作完成,已于上月初(2009-09-01)正式出版。

“IT小小鸟”主要是介绍了各位作者的的成长学习经历,对IT从业的选择经历,在成长学习到路上所遇到的挫折,以及工作后的部分经历。希望通过各自一路走来的经历可以对各位即将进入大学或者是即将从大学毕业的学弟学妹们有那么一点点帮助。

最近从周筠老师处得知,收到来不少自高校学生的反馈,反响很不错。如 东北师大的 王喆 在豆瓣上的书评:http://www.douban.com/review/2518322/,Ramiel 在个人Blog上的读后感想 http://hi.baidu.com/ramiel/blog/item/5181f638ffa7b8f8b311c7a9.html 等!甚至还有公司(兰亭集势)专门团够团购200本“IT小小鸟”,用于校园招聘。很欣慰自己的成长经历能够对各位后来者有所价值!

附注:
网上购买此书 请 点这里

, ,

From Ryam

p26
倒数第二行:
原文:“逻辑层与存储引擎实现层的过度解偶”
-> :“逻辑层与存储引擎实现层的过度解耦”

p82
第9行:
原文:“这样就省略了分页程序在分以前实时计算”
-> :“这样就省略了分页程序在分页前实时计算”

p118
第5行:
原文:“如果系统须要有限保证”
-> :“如果系统须要优先保证”

p123
第1行:
原文:“并不一定完全按照系数据库的元信息”
-> :“并不一定完全按照数据库的元信息”

p85
倒数第2行:
原文:“然后再瓶装展现对象”
-> :“然后再拼装展现对象”

p139
第8行:
原文:“那么将会存在大量记录指针信息存于同一Hash值相关联”
-> :“那么将会存在大量记录的指针信息与同一Hash值相关联”

p142
倒数第6行:
原文:“当然,并不是存在更新的字段就适合创建索引”
-> :“当然,并不是存在更新的字段就不适合创建索引”

p171
第3行:
原文:“但是当遇到一些自查询或较为复杂的join时”
-> :“但是当遇到一些子查询或较为复杂的join时”

第11行:
原文:“group_message_bad是优化前的表,优化后为group_message表),如示例代码9-1所示:…”

-> :这里的示例代码中group_message更换成group_message_bad

p194
第3行
原文:“这样不仅可以让变化频繁的Table的Query浪费Query Cache的内存”
-> :“这样不仅可以避免变化频繁的Table的Query浪费Query Cache的内存”

p196
倒数第1行:
原文:“先看一下与网络连接的性能配置项及对性能的影响”
-> :“先看一下与网络连接相关的性能配置项及其对性能的影响”

p202
倒数第2行:
原文:“在数据库上进行线后的参数调整”
-> :“在数据库上线后进行的参数调整”

p208
倒数第6行:
原文:“还是将页节点也加载进来”
-> :“还是将叶节点也加载进来”

p237
第2行:
原文:“还须要提一下系统高可用及数据安这两方面”
-> :“还须要提一下系统高可用及数据安全这两方面”

p246
第13行:
原文:“只有Master和Slave的server-id参数值比不一致时”
-> :“只有Master和Slave的server-id参数值不一致时”

p249
第2行:
原文:“最大的好处就是既可以避免主Master的写操作不会受到Slave集群的复制所带来的影响”
-> :“最大的好处就是既可以避免主Master的写操作受到Slave集群的复制所带来的影响”

p261
倒数第9行:
原文:“主要是将某个访问极其平凡的表”
-> :“主要是将某个访问极其频繁的表”

p264
图14-3
原文:“hprizontal sharding”
-> :“horizontal sharding”

问题:photo albums数据库的水平切分示例中,每个切分库的切分条件都是album_id % n = 0,应该依次为album_id % n = 0, album_id % n = 1 …

p279
倒数第15行:
原文:“当Innodb在本地的Buffer Pool(…)的时候”
-> :“当Innodb在本地的Buffer Pool(…)找不到所需数据的时候”

From 云水馋心

P153
原文:“c_rec.group_msg_id = c_rec.id{”
-> :“c_rec.group_msg_id=m_rec.id”

From mysqlkumao
P201
原文:“10.4.3 Sort Buffer、Join Buffer 和 Read Buffer”
-> : “10.4.3 Sort Buffer 和 Join Buffer”

From ochef
推荐序二
原文:“Blog:http://www.orawh.com/”
-> : “Blog:http://www.ixdba.com/”

P18
原文:“ 如:update、delte、insert、create”
-> : “ 如:update、delete、insert、create”

Latest Update:2009.10.19

From:Jasper Che
P108
原文:“TL_WRITE_ALLOW_WRITE”
->:“WRITE_ALLOW_WRITE”
原文:“P108 L7 同时Current read lock是Read_NO_INSERT的锁定类型”
->:“同时Current read lock不是Read_NO_INSERT的锁定类型”

P109
原文: “而其他几种支持事务的存储存储引擎”
->:“而其他几种支持事务的存储引擎”

P127
原文:“改行算法只须要访问一次数据 ”
->:“改进算法只须要访问一次数据”
P131
原文:“主要包含如下集中类型”
->:“主要包含如下几种类型”
P148
原文:“subject LIKE ‘weiurazs%’”
->:“AND subject LIKE ‘weiurazs%’”

Latest Update:2009.12.14

, , ,

《MySQL性能调优与架构设计》从最开始网上书店上架(2009.06.11)到现在才35天时间,库存量就已经很少了。接到出版社通知,需要今天完成勘误信息的整理,马上出片进行第二次印刷了。

这次印刷会订正掉目前位置已知的所有编写及出版过程中出现的错误信息,相信各方面品质都会比第一次印刷更好。

非常感谢各位读者热心积极的反馈以及肯定,感谢各位朋友的支持,感谢博文视点出版社的大力帮助,谢谢大家了。

, , ,

推荐序二
“当年加入淘宝的毕业生成了淘宝开发 DBA 的主管,他就是本书的作者” -> “当年加入淘宝的毕业生成了淘宝开发DBA的主管,而当年加入阿里巴巴B2B的毕业生,就是本书的作者”

序言
“APS 编写网站应用” -> “ASP 编写网站应用”

P90
“假设 id 为 100″ -> “假设 id 为 1″
“取出前20个” -> “取出第100至120个”
“通过调用存储引擎借口来获取” -> “通过调用存储引擎接口来获取”

P91
代码 6-4 的解决方案一中 “LIMIT” 之前增加 “ORDER BY gmt_create desc”, 也就是在 P91 的第2行和第3行之间插入1行:ORDER BY gmt_create DESC

P112
最后一行的 “quuery” -> “query”

P117
“尽两减少大的复杂 Query” -> “尽量减少大的复杂 Query”

P152
“不仅 user_group 表的访问从 ref 变成了 ALL” -> “不仅 group_message_content 表的访问从 ref 变成了 ALL”

P167
代码 8-31 替换成如下:

sky@localhost : example 03:12:45> EXPLAIN SELECT DISTINCT MAX(user_id)
    ->
FROM group_message
    ->
WHERE group_id > 1 AND group_id < 10
    ->
GROUP BY group_id\G
***************************
1. row ***************************
          
id: 1
 
select_type: SIMPLE
        
table: group_message
        
type: range
possible_keys: idx_gid_uid_gc
          
key: idx_gid_uid_gc
      
key_len: 4
          
ref: NULL
        
rows: 3563
        
Extra: Using where; Using index; Using temporary; Using filesort
1 row in set (0.00 sec)

在”最后再看一下这个和 GROUP BY 一起使用的带有聚合函数的示例,与上面第三个示例相比,可以看到已经多了 filesort 排序操作了,因为我们使用了 MAX 函数。”之后增加
“要取得分组后的 MAX 值,又无法使用索引完成操作,只能通过排序才行了。”

P178
“但是从 5.0.3 开始,VARCHAR 的最大存储限制已经更改为字节数限制了,扩展到可以存放 65535 bytes 的数据,不同的字符集可能存放的字符数并不一样。也就是说,在 MySQL 5.0.3 之前的版本,M 所代表的是字符数,而从5.0.3 版本开始,M 代表的是字节数了。” ->
“但是从 5.0.3 开始,VARCHAR 的最大存储限制已经改为字节数,而且不再有单个字段的限制,而是受单条记录除 TEXT 和 BLOB 类型字段外最大不超过 65536 Bytes 的限制。不过,字段定义中的 M 仍然表示字符数,所以定义后的 VARCHAR 类型字段实际最大可存放数据长度与字符集相关的。”

P199
“最多将缓存 32 个连接线程” -> “最多将缓存 64 个连接线程”

P200
“(127 – 12) / 127 * 100%” -> “(127 – 11) / 127 * 100%”

P202
“平台上可以超出 4BG 的限制” -> “平台上可以超出 4GB 的限制”

P207
“Key_buffer_UsageRatio = (1 – Key_blocks_used/(Key_blocks_used+Key_blocks_unused)) * 100%” ->
“Key_buffer_UsageRatio = (Key_blocks_used/(Key_blocks_used+Key_blocks_unused)) * 100%”

P286
“Lucene 具肖高效的全文索引和分词算法” -> “Lucene 具有高效的全文索引和分词算法”

Update: 2009.07.06

P119 没出现一次对应的事件则数量加1 -> 每出现一次对应的事件则数量加1

P120 然后根据分析结果着手指定优化计划 -> 然后根据分析结果着手制定优化计划

Update: 2009.07.07

P66 “使用工具” -> “实用工具”

Update: 2009.07.14

P8 “Eent Scheduler” -> “Event Scheduler”

p54 “限制耽搁用户” -> “限制单个用户”

P52 “mysql.table_priv” -> “mysql.tables_priv”
“mysql.column_priv” -> “mysql.columns_priv”

Update:2009.08.14

P191 L16 “Event 都被会被 IO 线程” -> “Event 都会被 IO 线程”

P243 L5 “修改的才式” -> “修改的形式”

Update:2009.09.03

, , ,

有网友建议将原书“附录A”中的示例库结构脚本在网上贴出来,方便大家做实验的时候不用一个字母一个字母的敲,挺好的建议,以下就是示例库结构脚本的所有创建语句:

--创建数据库
CREATE DATABASE example;
 
--创建表
--索引是根据应用中使用的
Query 的情况而决定,所有表开始都仅仅只有主键,没有其他的索引
--各表没有特定存储引擎和字符集,各位读者朋友可根据自己的环境决定
CREATE TABLE event (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
user_id int(11) NOT NULL,
 
event_type varchar(8) NOT NULL,
 
event_msg varchar(255) DEFAULT NULL,
 
PRIMARY KEY (id)
);
 
--组内讨论信息
summary
CREATE TABLE group_message (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
group_id int(11) NOT NULL,
 
user_id int(11) NOT NULL,
 
author varchar(32) NOT NULL,
 
subject varchar(128) NOT NULL,
 
PRIMARY KEY (id)
);
 
--组内讨论信息内容
CREATE TABLE group_message_content (
 
group_msg_id int(11) NOT NULL,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
content text NOT NULL,
 
PRIMARY KEY (group_msg_id)
);
 
--组信息
CREATE TABLE groups (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
name varchar(32) NOT NULL,
 
status varchar(16) NOT NULL,
 
description varchar(1024) DEFAULT NULL,
 
PRIMARY KEY (id)
);
 
--特殊消息
CREATE TABLE message (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
subject varchar(64) NOT NULL,
 
status varchar(16) NOT NULL,
 
PRIMARY KEY (id)
);
 
--消息
CREATE TABLE message_content (
 
msg_id int(11) NOT NULL,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
content varchar(512) DEFAULT NULL,
 
PRIMARY KEY (msg_id)
);
 
--照片表
CREATE TABLE photo (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
user_id int(11) NOT NULL,
 
status varchar(16) NOT NULL,
 
subject varchar(64) NOT NULL,
 
url varchar(64) NOT NULL,
 
PRIMARY KEY (id)
);
 
--相册表
CREATE TABLE photo_album (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
album_name varchar(64) NOT NULL,
 
user_id int(11) NOT NULL,
 
PRIMARY KEY (id)
);
 
--照片相册关系表
CREATE TABLE photo_album_relation (
 
id int(11) NOT NULL auto_increment,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
album_id int(11) NOT NULL,
 
photo_id int(11) NOT NULL,
 
PRIMARY KEY (id)
);
 
--照片回复信息表
CREATE TABLE photo_comment (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
photo_id int(11) NOT NULL,
 
comments varchar(512) NOT NULL,
 
PRIMARY KEY (id)
);
 
--系统各组广播消息表
CREATE TABLE top_message (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
user_id int(11) NOT NULL,
 
author varchar(32) NOT NULL,
 
subject varchar(128) NOT NULL,
 
PRIMARY KEY (id)
);
 
--用户基本信息表
CREATE TABLE user (
 
id int(11) NOT NULL AUTO_INCREMENT,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
nick_name varchar(32) NOT NULL,
 
password char(64) DEFAULT NULL,
 
email_b varchar(32) DEFAULT NULL,
 
status varchar(16) DEFAULT NULL,
 
PRIMARY KEY (id)
);
 
--用户个人详细信息表
CREATE TABLE user_profile (
 
user_id int(11) NOT NULL,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
sexuality char(1) NOT NULL,
 
msn varchar(32) DEFAULT NULL,
 
sign varchar(64) DEFAULT NULL,
 
birthday date DEFAULT NULL,
 
hobby varchar(64) DEFAULT NULL,
 
location varchar(64) DEFAULT NULL,
 
description varchar(1024) DEFAULT NULL,
 
PRIMARY KEY (user_id)
);
 
--用户分组表
CREATE TABLE user_group (
 
user_id int(11) NOT NULL,
 
gmt_create datetime NOT NULL,
 
gmt_modified datetime NOT NULL,
 
group_id int(11) NOT NULL,
 
user_type int(11) NOT NULL,
 
status varchar(16) NOT NULL,
 
PRIMARY KEY (user_id,group_id)
);

, , , , , ,