Tokyo Cabinet提供了Hash、Fixed-length、Table和B+ Tree四种数据结构,不同的结构特性和应用场景都不一样。TC本身提供了专门测试和调试工具tc (h/f/t/b) mgr。
Tokyo Tyrant在启动的时候,通过数据库文件名后缀来表示使用哪种数据结构。
以下是结构和后缀对应表:
启动时,还可以根据不同数据结构设置不同参数,用#开始,参数和值用=分开,例如/ttserver /database.tch#capnum=1#capsiz=1
参数含义如下,适用于TT:
TC有自己的一套读写缓冲机制,通过xmsiz设置内存缓冲大小,这个参数对整体性能影响比较大。
一、Hash Database
Hash Database是最基本的结构了,只提供key-value存储方式,类似于memcached,Hash Database的特点是查找速度很快,bucket越多,数据越分散,查找越快。
Hash database支持的参数有:”mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, “xmsiz”, 和 “dfunit”.
内存Hash Database支持的参数有:”bnum”, “capnum”, 和 “capsiz”
二、Fixed-length Database
Fixed-length Database的读写速度是最快的,并且存储所需的空间是最小的(因为不需要存储数据以外的结构关系,但是因为是定长的,所以会有空间浪费),key只 能是数字,而value的长度是有限的,所以必须设置一个合适的value长度,太长会浪费空间,间接影响性能(TPS)。
Fixed-length database支持的参数有:”mode”, “width”, 和 “limsiz”.
创建数据库
[root@localhost ~]# tcfmgr create user.f
插入数据
[root@localhost ~]# tcfmgr put user.f 123 00
[root@localhost ~]# tcfmgr put user.f 124 'aa'
查询
[root@localhost ~]# tcfmgr get user.f 123
00
三、B+ Tree Database
B+ Tree Database的特点是一个key可以有重复value,而且允许在value之间上下移动,value按插入顺序排列,可以范围查找key,也可以前 缀查找key,查找的复杂度是O(log n),所以n越大性能越低。
B+ tree database支持的参数有:”mode”, “lmemb”, “nmemb”, “bnum”, “apow”, “fpow”, “opts”, “lcnum”, “ncnum”, “xmsiz”, and “dfunit”
内存B+ Tree Database支持的参数有:”capnum” and “capsiz”.
创建数据库
[root@localhost ~]# tcbmgr create user
插入记录,重复key
[root@localhost ~]# tcbmgr put -dd user u1 123
[root@localhost ~]# tcbmgr put -dd user u1 456
[root@localhost ~]# tcbmgr put -dd user u1 789
[root@localhost ~]# tcbmgr put -dd user u2 abc
[root@localhost ~]# tcbmgr put -dd user u2 efg
查询所有记录
[root@localhost ~]# tcbmgr list -pv user
u1 123
u1 456
u1 789
u2 abc
u2 efg
前缀查找
[root@localhost ~]# tcbmgr list -pv -fm u1 user
u1 123
u1 456
u1 789
范围查找
[root@localhost ~]# tcbmgr list -pv -rb u1 u2 user
u1 123
u1 456
u1 789
u2 abc
u2 efg
四、Table Database
Table Database的特点是支持检索,支持多列字段,支持列索引,性能不如其它结构。
Table Database提供了类似RMDB的存储功能,一个主键可以有多个字段,例如,在RMDB中user表可能会有user_id、name和 password等字段,而在Table Database也提供这种支持。
Table database支持的参数有:”mode”, “bnum”, “apow”, “fpow”, “opts”, “rcnum”, “lcnum”, “ncnum”, “xmsiz”, “dfunit”, and “idx”.
1.类RMDB的表结构
Table Database最大的特点是支持类RMDB的表结构功能。
创建user表
[root@localhost ttserver]# tctmgr create user
向表里插入记录
[root@localhost ttserver]# tctmgr put user 1 "name" "u1" "password" "123"
[root@localhost ttserver]# tctmgr put user 3 "name" "u3" "password" "123456"
[root@localhost ttserver]# tctmgr put user 9 "name" "u9" "password" "123456789"
删除记录
[root@localhost ttserver]# tctmgr out user 3
2.查询
查询所有记录
[root@localhost ttserver]# tctmgr list -pv user
1 name u1 password 123
3 name u3 password 123456
9 name u9 password 123456789
通过主键查询
[root@localhost ttserver]# tctmgr get user 1
name u1
password 123
通过其它字段查询
[root@localhost ttserver]# tctmgr search -pv user name STREQ "u1"
1 name u1 password 123
[root@localhost ttserver]# tctmgr search -pv user name STREQ "u1" password STREQ "123"
1 name u1 password 123
附查询条件表达式(前面加~,相当于标准sql中的非)[资料来源采用tokyo cabinet搭建表格型DBM ]
3.排序
[root@localhost ttserver]# tctmgr search -pv -ord name STRDESC user
9 name u9 password 123456789
3 name u3 password 123456
1 name u1 password 123
排序参数含义如下:
STRASC:按字符升序
STRDESC:按字符降序
NUMASC:按数字升序
NUMDESC:按字符降序
4.设置索引
[root@localhost ttserver]# tctmgr setindex -it "lexical" user name
索引类型
lexical:词汇
decimal:数字
token:不明白
qgram:不明白
void:不明白
5.tctmgr
tctmgr支持的命令和参数
tctmgr create [-tl] [-td|-tb|-tt|-tx] path [bnum [apow [fpow]]]
创建数据库
tctmgr inform [-nl|-nb] path
输出数据库的状况
tctmgr put [-nl|-nb] [-sx] [-dk|-dc|-dai|-dad] path pkey [cols ...]
创建记录
tctmgr out [-nl|-nb] [-sx] path pkey
删除记录
tctmgr get [-nl|-nb] [-sx] [-px] [-pz] path pkey
通过主键查询记录
tctmgr list [-nl|-nb] [-m num] [-pv] [-px] [-fm str] path
输出所有记录
tctmgr search [-nl|-nb] [-ord name type] [-m num] [-sk num] [-kw] [-pv] [-px] [-ph] [-bt num] [-rm] [-ms type] path [name op expr ...]
通过自定义条件查询记录
tctmgr optimize [-tl] [-td|-tb|-tt|-tx] [-tz] [-nl|-nb] [-df] path [bnum [apow [fpow]]]
优化数据库
tctmgr setindex [-nl|-nb] [-it type] path name
设置索引
tctmgr importtsv [-nl|-nb] [-sc] path [file]
Store records of TSV in each line of a file.
tctmgr version
Print the version information of Tokyo Cabinet.
金山公司在Table Database的基础上,提供了SQL适配器,还整合了些方便使用的功能,TCSQL
TC博大精深,还有太多没有理解的地方,错误在所谓难免,不妥之处请予赐教。。
参考资料:
Tokyo Cabinet: a modern implementation of DBM