体验TokyoCabinet和TokyoTyrant 博客分类: 持久化 TokyoCabinet应用服务器配置管理数据结构多线程
程序员文章站
2024-03-23 16:12:22
...
转载于:http://hi.baidu.com/ah%5F%5Ffu/blog/item/1f59571157625277cb80c44c.html
由于自己的单词水平退化到初中时代,因此先在单词上扫盲:
· Tokyo,是东京,就是日本首都东京....(光这行就能雷走很多读者)
·Cabinet, 储物柜
·Tyrant, 暴君(让我产生了诸如“誓死效忠天皇陛下”一类幻觉,哦,不好不好,技术就是技术,不要带上民族情绪)
1、首先先下载最新的TokyoCabinet安装包:
cd /home/ahfu
wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.31.tar.gz
tar -zxvf tokyocabinet-1.4.31.tar.gz #解压
cd tokyocabinet-1.4.31
./configure -h #看看配置的说明
2、简单起见,我只是尝试尝试,还不想安装到整个系统中,所以:
mkdir -p /home/ahfu/tokyo_cabinet
./configure --prefix=/home/ahfu/tokyo_cabinet --enable-static --disable-shared #安装到指定的目录,并且静态编译
make && make install
3、编译后的程序都在 /home/ahfu/tokyo_cabinet下,目录为:
bin 编译好的二进制程序
include *.h的头文件
lib *.a或*.so的库文件
libexec 目录里有个tcawmgr.cgi的文件,还没搞懂干嘛的!
share 文档
4、bin目录下的二进制程序以tc开头,第三个字母表示分类。
test结尾是指性能测试工具,mttest是指多线程测试工具。
分四类:
·所有的文件格式的操作程序:tcamgr, tcatest (a代表all)
·B+树文件的操作程序:tcbmgr, tcbmttest, tcbtest (b代表B+树)
·固定长度数组文件的操作程序:tcfmgr, tcfmttest, tcftest (f代表Fixed-length Database)
·HASH文件的操作程序:tchmgr, tchmttest, tchtest (h代表hash)
·表格文件的操作程序:tctmgr, tctmttest, tcttest (t代表table)
还有几个额外的使用工具:u代表utility api
·tcucodec 编码和解码程序
·tcumttest test cases of the on-memory database API of Tokyo Cabinet
·tcutest test cases of the utility API of Tokyo Cabinet
5、下面以b+树为例,测试一下如何去操作:
·创建一个b+格式的数据库文件:
./tcbmgr create /home/ahfu/ahfu_btree.tcb
·增加一个key-value:
./tcbmgr put /home/ahfu/ahfu_btree.tcb key1 value1
·获取一个key:
./tcbmgr get /home/ahfu/ahfu_btree.tcb key1
·查看所有的key:
./tcbmgr list /home/ahfu/ahfu_btree.tcb
·删除一个key:
./tcbmgr out /home/ahfu/ahfu_btree.tcb key1
==================================================
接上一篇,TokyoCabinet是存储引擎,TokyoTyrant才是服务器。体验的过程如下:
1、下载和安装
cd /home/ahfu/
wget http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.33.tar.gz
tar -zxvf tokyotyrant-1.1.33.tar.gz
cd tokyotyrant-1.1.33
./configure -h #看看安装选项
./configure --prefix=/home/ahfu/tokyo_tyrant --enable-static --disable-shared --with-tc=/home/ahfu/tokyo_cabinet #安装的时候指定tokyo cabinet的位置
make && make install
2、目录结构:
bin 二进制程序
include 头文件
lib *.a或*.so的库文件
sbin 启动或关闭服务的脚本文件目录
share 帮助文档
3、bin目录下的执行程序:
ttserver 服务器进程,用这个东东启动网络服务
tcrmgr 客户端工具
tcrmttest, tcrtest 多线程和单线程性能测试的客户端工具
ttulmgr, ttultest test cases of the remote database API of Tokyo Tyrant
4、尝试启动服务器:
./ttserver -host 192.168.0.55 -port 19001 -thnum 8 -dmn -sid 1 -pid /home/ahfu/ahfu_btree.pid -log /home/ahfu/ahfu_btree.log -le -ulog /home/ahfu/ -ulim 128m -uas /home/ahfu/ahfu_btree.tcb
#具体的参数看文档的介绍
5、下面试试用HTTP协议来操作key-value数据库:
添加数据:
curl -X PUT http://192.168.0.55:19001/key1 -d "value1"
获取数据:
curl -X GET http://192.168.0.55:19001/key1
删除数据:
curl -X DELETE http://192.168.0.55:19001/key1
=======================================================
ttserver: 32位操作系统中未启动大文件,文件超过2G会怎么样?2009-08-31 16:56 答案是:ttserver崩溃了!
汗,作者好歹也加个判断啊,怎么就崩溃了呢?
好吧,我启用64位偏移的大文件,重新编译:
./configure --prefix=/home/ahfu/tokyo_cabinet --enable-static --disable-shared --enable-off64 && make && make install
然后再添加数据,这次就可以超过2G了。注意,在以前的目录重新编译的话,要先执行make clean。
此外,ttserver的启动参数中,在文件的后面加上参数#opts=l似乎没什么用。
=========================================================
ttserver的几种部署方式2009-10-20 20:17 可以把ttserver理解成一种key-value形式的数据库,在运营中就像管理数据库一样去管理ttserver,使得性能和数据安全都能得到较好的保障。
部署ttserver的方式,可以根据访问量和数据规模循序渐进地这样部署:
1、单机:数据量不大,访问量不大
ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
如果希望提高查询的性能,可以把hash的桶设置得再大些,然后缓存的记录多一些。
同时,设置-uas参数异步写入日志,可提高写入的性能。不过这样可能导致日志丢失,降低了数据安全性。
2、一主一备:数据量不大,访问量不大,且对数据安全性有要求
主服务器:(与上面一致)
ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
备份服务器:在另一个机器上启动,不需要缓存
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 5 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 /home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=0#xmsiz=0m
备份服务器可以找性能不高的旧服务器,这种设置也只是为了保障数据安全而做的设置。
3、互为主备:数据量增大,访问量也增大,对数据安全有要求,且希望避免单点故障
第一个服务器:
ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.101 -mport 20002 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
第二个服务器:
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc -rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 /home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m
应用程序可以访问任意一个服务器进行读写,且应用程序发现某服务器不能访问后,可立即转到另一台服务器。
4、读写分离:写量猛增,读量猛增
TokyoCabinet支持六种数据引擎,其中on-memory hash database和on-memory b+ database两种是将数据存放在内存中的,不对数据做持久化。
因此,可以使用on-memory hash database引擎的ttserver作为写服务器,然后采用复制的方式将on-memory hash database上的数据复制到hash database的多个ttserver上去,然后将多个hash database ttserver作为读服务器。这实际上是通过降低一致性来提高性能。
on-memory hash database的配置: 缓存的记录数和内存都配置得很小
ttserver -host 192.168.0.99 -port 20000 -thnum 128 -dmn -ulim 1024m -ulog /data/home/game/temp/test_data/test_ulog_01 -log /data/home/game/temp/test_data/log/test_data_01.log -pid /data/home/game/temp/test_data/log/test_data_01.pid -sid 0 "*#bnum=10000000#capnum=100#capsiz=10m"
hash database ttserver 1 的配置: 从on-memory hash database复制数据
ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.99 -mport 20000 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 "/home/ahfu/temp/test_data/log/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m"
hash database ttserver 2 的配置: 从on-memory hash database复制数据
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.99 -mport 20000 -rcc -rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 "/home/ahfu/temp/test_data/log/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m"
配置为读写分离后,客户端写入的时候连接on-memory hash database,读取的时候连接其他的ttserver。
5、客户端实现分布,分库:海量数据
数据量再大,靠几台服务器已经无法支撑的时候,分库仍然是无奈的选择。将数据按照业务划分,或者按照某一数值划分,存在在多个ttserver群集中去。
客户端程序在写入或者读取的时候,自动根据业务规则去访问对应的群集即可。
由于自己的单词水平退化到初中时代,因此先在单词上扫盲:
· Tokyo,是东京,就是日本首都东京....(光这行就能雷走很多读者)
·Cabinet, 储物柜
·Tyrant, 暴君(让我产生了诸如“誓死效忠天皇陛下”一类幻觉,哦,不好不好,技术就是技术,不要带上民族情绪)
1、首先先下载最新的TokyoCabinet安装包:
cd /home/ahfu
wget http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.31.tar.gz
tar -zxvf tokyocabinet-1.4.31.tar.gz #解压
cd tokyocabinet-1.4.31
./configure -h #看看配置的说明
2、简单起见,我只是尝试尝试,还不想安装到整个系统中,所以:
mkdir -p /home/ahfu/tokyo_cabinet
./configure --prefix=/home/ahfu/tokyo_cabinet --enable-static --disable-shared #安装到指定的目录,并且静态编译
make && make install
3、编译后的程序都在 /home/ahfu/tokyo_cabinet下,目录为:
bin 编译好的二进制程序
include *.h的头文件
lib *.a或*.so的库文件
libexec 目录里有个tcawmgr.cgi的文件,还没搞懂干嘛的!
share 文档
4、bin目录下的二进制程序以tc开头,第三个字母表示分类。
test结尾是指性能测试工具,mttest是指多线程测试工具。
分四类:
·所有的文件格式的操作程序:tcamgr, tcatest (a代表all)
·B+树文件的操作程序:tcbmgr, tcbmttest, tcbtest (b代表B+树)
·固定长度数组文件的操作程序:tcfmgr, tcfmttest, tcftest (f代表Fixed-length Database)
·HASH文件的操作程序:tchmgr, tchmttest, tchtest (h代表hash)
·表格文件的操作程序:tctmgr, tctmttest, tcttest (t代表table)
还有几个额外的使用工具:u代表utility api
·tcucodec 编码和解码程序
·tcumttest test cases of the on-memory database API of Tokyo Cabinet
·tcutest test cases of the utility API of Tokyo Cabinet
5、下面以b+树为例,测试一下如何去操作:
·创建一个b+格式的数据库文件:
./tcbmgr create /home/ahfu/ahfu_btree.tcb
·增加一个key-value:
./tcbmgr put /home/ahfu/ahfu_btree.tcb key1 value1
·获取一个key:
./tcbmgr get /home/ahfu/ahfu_btree.tcb key1
·查看所有的key:
./tcbmgr list /home/ahfu/ahfu_btree.tcb
·删除一个key:
./tcbmgr out /home/ahfu/ahfu_btree.tcb key1
==================================================
接上一篇,TokyoCabinet是存储引擎,TokyoTyrant才是服务器。体验的过程如下:
1、下载和安装
cd /home/ahfu/
wget http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.33.tar.gz
tar -zxvf tokyotyrant-1.1.33.tar.gz
cd tokyotyrant-1.1.33
./configure -h #看看安装选项
./configure --prefix=/home/ahfu/tokyo_tyrant --enable-static --disable-shared --with-tc=/home/ahfu/tokyo_cabinet #安装的时候指定tokyo cabinet的位置
make && make install
2、目录结构:
bin 二进制程序
include 头文件
lib *.a或*.so的库文件
sbin 启动或关闭服务的脚本文件目录
share 帮助文档
3、bin目录下的执行程序:
ttserver 服务器进程,用这个东东启动网络服务
tcrmgr 客户端工具
tcrmttest, tcrtest 多线程和单线程性能测试的客户端工具
ttulmgr, ttultest test cases of the remote database API of Tokyo Tyrant
4、尝试启动服务器:
./ttserver -host 192.168.0.55 -port 19001 -thnum 8 -dmn -sid 1 -pid /home/ahfu/ahfu_btree.pid -log /home/ahfu/ahfu_btree.log -le -ulog /home/ahfu/ -ulim 128m -uas /home/ahfu/ahfu_btree.tcb
#具体的参数看文档的介绍
5、下面试试用HTTP协议来操作key-value数据库:
添加数据:
curl -X PUT http://192.168.0.55:19001/key1 -d "value1"
获取数据:
curl -X GET http://192.168.0.55:19001/key1
删除数据:
curl -X DELETE http://192.168.0.55:19001/key1
=======================================================
ttserver: 32位操作系统中未启动大文件,文件超过2G会怎么样?2009-08-31 16:56 答案是:ttserver崩溃了!
汗,作者好歹也加个判断啊,怎么就崩溃了呢?
好吧,我启用64位偏移的大文件,重新编译:
./configure --prefix=/home/ahfu/tokyo_cabinet --enable-static --disable-shared --enable-off64 && make && make install
然后再添加数据,这次就可以超过2G了。注意,在以前的目录重新编译的话,要先执行make clean。
此外,ttserver的启动参数中,在文件的后面加上参数#opts=l似乎没什么用。
=========================================================
ttserver的几种部署方式2009-10-20 20:17 可以把ttserver理解成一种key-value形式的数据库,在运营中就像管理数据库一样去管理ttserver,使得性能和数据安全都能得到较好的保障。
部署ttserver的方式,可以根据访问量和数据规模循序渐进地这样部署:
1、单机:数据量不大,访问量不大
ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
如果希望提高查询的性能,可以把hash的桶设置得再大些,然后缓存的记录多一些。
同时,设置-uas参数异步写入日志,可提高写入的性能。不过这样可能导致日志丢失,降低了数据安全性。
2、一主一备:数据量不大,访问量不大,且对数据安全性有要求
主服务器:(与上面一致)
ttserver -host 192.168.0.100 -port 20001 -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
备份服务器:在另一个机器上启动,不需要缓存
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 5 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 /home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=0#xmsiz=0m
备份服务器可以找性能不高的旧服务器,这种设置也只是为了保障数据安全而做的设置。
3、互为主备:数据量增大,访问量也增大,对数据安全有要求,且希望避免单点故障
第一个服务器:
ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.101 -mport 20002 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 /home/ahfu/temp/test_data/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m
第二个服务器:
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.100 -mport 20001 -rcc -rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 /home/ahfu/temp/test_data/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m
应用程序可以访问任意一个服务器进行读写,且应用程序发现某服务器不能访问后,可立即转到另一台服务器。
4、读写分离:写量猛增,读量猛增
TokyoCabinet支持六种数据引擎,其中on-memory hash database和on-memory b+ database两种是将数据存放在内存中的,不对数据做持久化。
因此,可以使用on-memory hash database引擎的ttserver作为写服务器,然后采用复制的方式将on-memory hash database上的数据复制到hash database的多个ttserver上去,然后将多个hash database ttserver作为读服务器。这实际上是通过降低一致性来提高性能。
on-memory hash database的配置: 缓存的记录数和内存都配置得很小
ttserver -host 192.168.0.99 -port 20000 -thnum 128 -dmn -ulim 1024m -ulog /data/home/game/temp/test_data/test_ulog_01 -log /data/home/game/temp/test_data/log/test_data_01.log -pid /data/home/game/temp/test_data/log/test_data_01.pid -sid 0 "*#bnum=10000000#capnum=100#capsiz=10m"
hash database ttserver 1 的配置: 从on-memory hash database复制数据
ttserver -host 192.168.0.100 -port 20001 -mhost 192.168.0.99 -mport 20000 -rcc -rts /home/ahfu/temp/test_data/test_data_01.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_01 -log /home/ahfu/temp/test_data/log/test_data_01.log -pid /home/ahfu/temp/test_data/log/test_data_01.pid -sid 1 "/home/ahfu/temp/test_data/log/test_data_01.tch#bnum=10000000#rcnum=100000#xmsiz=256m"
hash database ttserver 2 的配置: 从on-memory hash database复制数据
ttserver -host 192.168.0.101 -port 20002 -mhost 192.168.0.99 -mport 20000 -rcc -rts /home/ahfu/temp/test_data/test_data_02.rts -thnum 128 -dmn -ulim 1024m -ulog /home/ahfu/temp/test_data/test_ulog_02 -log /home/ahfu/temp/test_data/log/test_data_02.log -pid /home/ahfu/temp/test_data/log/test_data_02.pid -sid 2 "/home/ahfu/temp/test_data/log/test_data_02.tch#bnum=10000000#rcnum=100000#xmsiz=256m"
配置为读写分离后,客户端写入的时候连接on-memory hash database,读取的时候连接其他的ttserver。
5、客户端实现分布,分库:海量数据
数据量再大,靠几台服务器已经无法支撑的时候,分库仍然是无奈的选择。将数据按照业务划分,或者按照某一数值划分,存在在多个ttserver群集中去。
客户端程序在写入或者读取的时候,自动根据业务规则去访问对应的群集即可。