NOSQL研发之路孙立@凤凰网://t.sina.com.cn/sunli1223NOSQL介绍oNOSQL=NotOnlySQLoNOSQL分类oNOSQL+Mysql+Memcached参见:的不足,让NOSQL来弥补oMysql的扩展问题oMysql的Queycache问题oMysql的SQL解析和协议太重Tokyocabinet/Tokyotyrant TokyoCabinet 是日本人MikioHirabayashi(平林幹雄)の ページ开发的一款DBM数据库(注:大名鼎鼎的DBM数据库qdbm就是他开发的),该数据库读写非常快。insert:0.4sec/1000000recordes(2500000qps),写入100万数据只需要0.4秒。search:0.33sec/1000000recordes(3000000qps),读取100万数据只需要0.33秒。下图为各种key-value数据库读写数据的性能测试,可以看出TokyoCabinet的速度是非常快的。Tokyotyrant是TC的网络接口,提供兼容的memcached协议,http协议,还提供更加强大的二进制协议。因为Tokyotyrant的进程名字是ttserver,我们习惯性的称其为ttserver为什么使用ttservero08年开发全站评论系统开始使用o高性能o支持主从复制o兼容memcached协议o数据文件小o备份,增加从库方便Ttserver的缺陷和解决办法o不支持memcached的flag和expireFlag:无法支持压缩存储和对象,数组的直接存储。解决办法:客户端解决。o大规模出错问题PHP下面经常遇到,判断返回false尝试重连一次Ttserver的问题o大数据崩溃,甚至无法重启。o单文件,更新随机写严重o吞吐量不稳定从slave库恢复,记住:一定要做从库Ttserver的问题.tch#bnum=100000000#xmsiz=3802400000.tch#bnum=10000000#xmsiz=802400000ttserver的问题oIO不稳定,造成延迟o作者目前宣称不再升级KyotoCabinetKyotoTycoonTC的存储机制TC的存储机制开发自己的NOSQLottserver不稳定的风险o线上产品都是用了memcached协议(无缝切换)o增强对底层存储的技术控制能力o为此,我们开发了INetDB我们用在oIMCP系统的所有新闻存储,目前使用lzf压缩后超过30GBo论坛的持久缓存启用了两个实例,使用了php客户端压缩,分别占用42GBo论坛其中一个实例的监控图Featureso兼容的memcached协议oMaster-slave主从复制o支持ttserver复制协议o高性能o支持内部数据压缩(gzip,lzf)o数据遍历o复制无需保存类似ttserver的bin-logo全面的监控数据接口Benchmark(基准测试)o50线程随机读取10万key区间,value为1K,模拟应用的热点读取能达到84000r/sINetDBvsTTServero小数据量下INetDB没有ttserver写入和读取快o大数据量下,INetDB性能表现更加稳定和可靠oINetDB支持Flags参数,支持压缩和直接的php数组存储.同时也支持过期参数。o无复制log文件,避免定期清理logoINetDB的状态监控更多无日志复制实现方式poskeyoperation1$key1add2$key2set3$key2increment4$key2delete5flush复制协议流程position操作数据masterconnectslave提高性能的一些调整o你应该使用php的长连接o如果数据超过5K建议使用php的压缩选项o请求如果落在一定的key区间,也就是热点访问,可以提高缓存命中率oulimit-SHn51200延伸o利用复制协议可以做很多事情关于磁盘IOo随机写和随机读是很慢的o顺序写和顺序读是很快的o比较好避免随机写,难于避免随机读o充分利用内存仍然是最好的优化方式关于开发自己的NOSQL存储o有现成的最好不要自行开发o弄清你需要的存储类型o结合你的业务特点,不要盲目对比性能o网络协议很重要o一切可替换,避免Cassandra在digg的遭遇谢谢Q&A