分类: 数据库开发技术
2010-09-02 15:12:19
Tokyo是和Tokyo Tyrant的简称,合在一起用也称ttserver。
是日本人 平林幹雄 开发的一款 NoSQL 数据库,数据库由一系列key-value对的记录构成,类似bdb。
Tokyo Tyrant 是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有Memcached兼容协议,也可以通过HTTP协议进行数据交换。Tokyo Tyrant 加上 Tokyo Cabinet,构成了一款支持高并发的分布式持久存储系统Tokyo。
针对使用tt时出现太多误用,参数误设或未设,提供使用手册的摘要。在此开一个讨论的头。
测试了在32位机器和64位机器都运行正常,64位机器可以支持>
32位机器加上编译选项” --enable-off
可用普通用户安装和运行。
Tokyo Cabinet依赖下面的库,一般Linux会自带,编译出错的话则需先安装:
: 用来压缩.
: 用来压缩.
下面的例子都是基于$HOME/local目录,使用时可更改。
下载最新的包(注意别下载到旧包了),2011年推荐用的最新版本是:
注:新版本主要进行bugfix,请尽量下载最新版本,changelog在源代码包里面。
下载后传到Linux的目录解压:
tar zxvf ***.tar.gz
cd tokyocabinet-***
32位操作系统:
./configure --prefix=$HOME/local/tokyocabinet/ --enable-off64
64位操作系统:
./configure --prefix=$HOME/local/tokyocabinet/
make
make install
32位操作系统要支持大于
1,Tcrmgr inform显示记录数为0,实际数据并没有被清空;
2,连接暴多但都操作失败,ttserver.log内提示“ERROR ttacceptsock failed”和“ERROR do_mc_set: operation failed”等;
3,Ttserver检测到文件异常会悄悄退出。
环境变量设置,cd $HOME 后vi .bash_profile,修改PATH和LD_LIBRARY_PATH加上Tokyo的相关安装路径:
PATH=$HOME/local/tokyocabinet/bin:$HOME/local/tokyotyrant/bin:$PATH
LD_LIBRARY_PATH=$HOME/local/tokyocabinet/lib:$HOME/local/tokyotyrant/lib:$LD_LIBRARY_PATH
export
PATH
export
LD_LIBRARY_PATH
然后安装:
--with-tc=$HOME/local/tokyocabinet
make
make
install
安装后在$HOME/local目录下生成了安装目录:
cd $HOME/local/tokyotyran
mkdir log data
新建两个目录用来存放ulog和db文件等。
在两台主机都安装完后,于是可以执行下面的启动步骤了。
末尾加上–enable-lua表示支持lua脚本:
./configure
--prefix=$HOME/local/tokyotyrant \
--with-tc=$HOME/local/tokyocabinet –enable-lua
查看tc版本:
tcamgr --version
查看tt版本:
ttserver --version
生产环境可用本例的目录结构,可将#后面的参数再调整。
Hash是B+tree的基础,数据put时直接写入文件或文件映射,并非写缓存,是比较安全的数据存储方式。数据量小时,全在缓存或内存映射内操作,读写很快。
而且写数据是单条写入,所以数据量超过内存映射xmsiz时后要直接写入db文件,性能下降明显,io升高明显。
"bnum", 用来保存计算完hash值后的每个key在db文件的位置,bnum太小时hash值冲突比例就大。冲突的key依次链接起来,查找时增加了搜寻次数;
该值持久化到db文件,全映射在内存,默认很小是131071,最大可以设几亿以上。,要减少hash冲突次数,则要设置bnum >= key个数,一般一年后key要达到5000万个,bnum则设置为5千万:50 000 000。
"opts", 指定压缩方式(hash的短数据压缩比不高)和bucket array对每条数据用4字节还是8字节保存文件偏移量,要支持db文件>2G请加“#opts=l”。要支持db文件>2G并且用效果较好的gzip用到的压缩算法请加“#opts=ld”。
hash方式单条数据很短(< 100字节)时压缩效果差,可以不用这个参数,否则请带上这个参数,但会占用更多cpu。
"rcnum", hash map缓存的记录数,get时放到这个缓存,set时从缓存清掉该key,默认0不缓存,设置则最小256,B+tree不用这个参数,缓存热点数据的,在get访问确定没明显热点时不要设置这个参数;在有明显热点时才需设置这个参数,在保证xmsiz足够大时这个参数推荐设小些,例如100万,因为会把rnum条key和value不加压缩地放内存,除非机器内存很充裕。
"xmsiz",指定文件映射尺寸,默认且最小为:256(放head等关键信息)+ bucket array的尺寸。注意这个最重要的参数必须>=db文件尺寸才能正常速度地响应,否则很慢,例如db文件最大会达到10G,则xmsiz设置为10G,单位字节。
上述参数中只有这个xmsiz参数在启动后还可通过重启调整。
B+tree是基于hash机制实现的,复用上述的db文件格式和文件映射,不同的只是最上层缓存机制。
写入db数据时,是按叶节点或非页节点进行了打包分页,整页写入;
压缩也是整页压缩,压缩比更高。
写也进行了缓存。
但必须在备机上定期执行tcrmgr sync,否则异常重启丢掉数据。
"bnum", 同hash方式的,但bnum的数量大于或等于存储总记录数的1/128即可,因为b+tree是整页保存到hash db内。
"opts", 同hash方式的该选项,要支持db文件>2G请加“#opts=l”。要支持db文件>2G并且用效果较好的gzip压缩算法请加“#opts=ld”。
b+tree方式压缩是整页(128条记录)压缩,压缩效果很好,数据量大时用b+tree时带上压缩参数降低内存使用量效果明显,但会稍占用更多cpu。
"xmsiz",同hash方式的。
"lcnum", b+tree缓存叶节点数,每个叶节点上可放128条记录作为一页,减轻读写压力,缓存热点数据的,默认1024,设的话最小64,太大则stop和sync时耗时很多。在xmsiz足够大时这个参数别设置。
"ncnum", b+tree缓存非叶节点数,每个树节点上可放256条索引作为一页,索引指向叶节点,减轻读写压力, 缓存热点数据,默认512,设的话最小64,太大则stop和sync时耗时很多。通常为叶节点数的一半。
在xmsiz足够大时以上两个参数可不设置。
#define BDBDEFLCNUM 1024 // default number of leaf cache
#define BDBDEFNCNUM 512 // default number of node cache
./ttserver -host 192.168.4.150 -port 11230
-thnum 8 -dmn -pid $HOME/local/tokyotyrant/bin/ttserver.pid
-log $HOME/local/tokyotyrant/log/ttserver.log -le -ulog $HOME/local/tokyotyrant/data/ -ulim
./ttserver -host 192.168.4.151 -port 11230
-thnum 8 -dmn -pid $HOME/local/tokyotyrant/bin/ttserver.pid -log $HOME/local/tokyotyrant/log/ttserver.log
-le -ulog $HOME/local/tokyotyrant/data/
-ulim
./ttserver -host 192.168.4.150 -port 11230 -thnum 8 -dmn -pid
$HOME/local/tokyotyrant/bin/ttserver.pid -log $HOME/local/tokyotyrant/log/ttserver.log -le -ulog $HOME/local/tokyotyrant/data/
-ulim
./ttserver -host 192.168.4.151 -port 11230 -thnum 8 -dmn -pid $HOME/local/tokyotyrant/bin/ttserver.pid
-log $HOME/local/tokyotyrant/log/ttserver.log -le
-ulog $HOME/local/tokyotyrant/data/ -ulim
UC优视 陈海涛 chenht@ucweb.com