技术开发 频道

张宴:Tokyo Cabinet数据库及其扩展应用

  很多人反应TT/TC插入数据超过一定数量后,性能会大幅度下降?先对TC做个测试:写入100万条:tchtest write test.tch 1000000,时间: 0.732秒 速度:1366120条/秒,写入200万条:tchtest write test.tch 2000000,时间: 1.718秒 速度:1164144条/秒,写入500万条:tchtest write test.tch 5000000,时间: 21.529秒 速度:232244条/秒,从测试来看,写入500万条数据,性能确实降低。但是,原因呢?

  修改参数后,再测试:写入100万条: tchtest write -xm 536870912 test.tch 1000000 5000000,时间: 0.580秒 速度: 1724137条/秒,写入200万条: tchtest write -xm 536870912 test.tch 2000000 5000000,时间: 1.105秒 速度: 1809954条/秒,写入500万条: tchtest write -xm 536870912 test.tch 5000000 5000000,时间: 2.737秒 速度: 1826817条/秒,可见,性能提升了不少,随着写入数据量地增加,速度依旧不减。

  关键参数(C API):bool tchdbsetxmsiz(TCHDB *hdb, int64_t xmsiz);Xmsiz指定了TCHDB的扩展MMAP内存大小,默认值为67108864,也就是64M,如果数据库文件超过64M,则只有前部分会映射在内存中,所以写入性能会下降。其他参数(C API) :bool tchdbtune(TCHDB *hdb, int64_t bnum, int8_t apow, int8_t fpow, uint8_t opts);bnum指定了 bucket array的数量。推荐设置bnum为预计存储总记录数的0.5~4倍,使key的哈希分布更均匀,减少在bucket内二分查找的时间复杂度。

  如果存储的.tch“数据库文件大小”<=“MMAP内存大小”,TCHDB哈希数据库是个不错的选择。TCHDB查找速度非常快,但是对内存的要求相对较高。

  实例:Tokyo Tyrant 的哈希数据库,优化参数如下,bnum设置为2000万条,xmsiz设置为1GB:

  ttserver -host 10.19.1.195 -port 11211 -thnum 4 -dmn -pid /data0/ttserver/ttserver.pid -log /data0/ttserver/ttserver.log -le -ulog /data0/ttserver/ -ulim 128m -sid 195 -rts /data0/ttserver/ttserver.rts /data0/ttserver/database.tch#bnum=20000000#xmsiz= 1073741824

图:TCHDB bucket array

0
相关文章