数据库
MySQL新技术探索与实践
架构和设计
@淘宝聂风:团队大了,很多的工程师一起工作,就会导致代码混乱,难以维护的情况,这样的感觉说是说不出来的,需要规范和协议,制定好规则,该分离就分离,该重构就重构!
@JavaCoding:业务代码混乱是很正常的, 但是, 基础代码一定要精益求精!
操作系统
关于IO的同步,异步,阻塞,非阻塞
Java
Java NIO 选择器(Selector) 知识预备 (linux poll)
项目管理
『Agile Project Management』软件项目成功的十大关键因素:用户参与;高级管理者的支持;清晰的业务目标;优化的范围;敏捷过程;项目管理专家;财务管理;拥有熟练技能的人力资源;正规的方法学;优秀的工具和基础设施。
网络营销
企业电子邮件营销五要素

投资
买进靠耐心,卖出靠决心——巴菲特
美国有位基金经理久仰巴菲特大名,专门去拜访巴菲特。可是在他和巴菲特详细交谈后失望地说,巴菲特只不过是一个“业务投资者”。他的意思是说,巴菲特的主要精力并没有集中在股市上,而是在股市外。
盈利能力最强的公司,往往是那些5年来甚至10年来经营方式一直没有改变的企业。由于经营方式一直不变,企业管理层才有机会不断改善服务,改进产品线,不断提高生产技术。相反,如果公司经验总是发生重大变化,就很有可能会随之经常出现重大失误。
投资和投机是两个经济概念,很不容易分辨,却又迥然不同。这主要看亮点:一是投资行为看重长期的稳定回报,而投机行为着眼于短期内技术性套利;二是投资行为追求双赢的发展途径,而投机行为只能增加未来经济的不确定性。
How FriendFeed uses MySQL to store schema-less data 这篇文章发布已经有一段时间了,之前也读过没留下什么映像,最近又重读了一遍做了一些笔记,内容如下。
- 数据库查询需要得到索引的支持,索引在加速查询的同时,也会直接影响了数据插入、更新的速度。另外,由于FriendFeed的数据量比较大,维护索引而引起的相关表的锁表时间会比较长。
- FriendFeed使用了读写分离技术和memcache来提升数据读取吞吐量
- FriendFeed使用了Sharding技术来提升数据写入吞吐量
- 由于Sharding技术的使用,有些很基础的关系运算就不能被支持了,例如Join。这样Mysql退化成了一个键值(KeyValue)数据库。
- 键值数据库很多。FriendFeed没有使用专门的键值数据库可能考虑多种原因
- 存储表的物理主键是autoincremen,而逻辑上的主键使用的是uuid。之所以这样做是因为uuid的不重复性对数据分布有好处,但因为InnoDB表类型会按照主键排序,此时如果使用类似uuid这样的无序串作为主键的话,那么当插入新行的时候,新行在数据文件中的位置是不确定的,这就会带来一个沉重的IO负担,而如果采用自增字段作为主键的话就不存在这个问题,因为新行始终位于数据文件的结尾。
关于FriendFeed如何保存schema-less数据的细节,这里就不在描述了,大家可以参考How FriendFeed uses MySQL to store schema-less data 或是老王的解读FriendFeed对MySQL的使用
参考资料
How FriendFeed uses MySQL to store schema-less data 原文
解读FriendFeed对MySQL的使用
mysql的“慢查询”指的是超过了允许的最大查询时间(long_query_time)的sql语句,而“未使用索引”查询顾名思义就是查询语句没有使用到索引的sql语句。
慢查询配置和使用
在msyqld的启动配置文件或命令行参数中增加以下参数
long_query_time=1
log-slow-queries=/var/mysql/logs/slow.log
long_query_time参数表示的是慢查询的度量时间,单位是秒,最小是1,缺省值是10,凡是执行时间超过long_query_time的sql语句都会记录到慢查询日志中。
--log-slow-queries[=file_name]的file_name参数可选,缺省值是host_name-slow.log,如果指定了file_name参数的话,mysql就会把慢查询的日志记录到file_name所设定的文件中,如果file_name提供的是一个相对路径,mysql会把日志记录到mysql的data目录中。
未使用索引查询配置和使用
在mysql的启动配置文件或命令行参数中增加--log-queries-not-using-indexes 参数就可以启用未使用索引查询语句了,日志记录的文件就是log-slow-queries对应的文件。
//mysql.conf
log-queries-not-using-indexes
使用案例
mysql的配置如下
[mysqld]
#Slow Query log
long_query_time=3
log-slow-queries
# Log queries that is not using indexes
log-queries-not-using-indexes
执行以下命令
select sleep(1);
select sleep(3);
select * from t1;
日志内容如下
D:\MySQL\MySQL Server 5.1\bin\mysqld, Version: 5.1.31-community-log (MySQL Community Server (GPL)). started with:
TCP Port: 3306, Named Pipe: (null)
Time Id Command Argument
# Time: 090625 12:58:09
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 3.000077 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
SET timestamp=1245905889;
select sleep(3);
# Time: 090625 12:58:42
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.046876 Lock_time: 0.031251 Rows_sent: 0 Rows_examined: 0
SET timestamp=1245905922;
select * from t1;
其他
除此之外还有一些专门的慢查询日志分析、查询工具,大家可以google以下相关的内容。
相关资料
mysql参考手册#Slow Query Log
MySQL 优化之 Slow Query Log
在之前的2-3年从事的开发工作中都使用到了MySQL数据库,对MySQL的关注和学习也越来阅读。不过在之前主要的学习内容还是基于Mysql做一些开发,很少涉及Mysql的性能调优与架构设计。随着工作环境和重心的改变,以后会多一点时间学习Mysql的性能调优与架构设计相关的内容。最近有一本《MySQL性能调优与架构设计》刚刚上市,马上买了一本。这本书的作者是阿里巴巴的简朝阳,阿里巴巴有不少优秀的架构师和DBA,希望以后能够读到他们更多的著作。
