技术开发 频道

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

  1、可以根据“字段”检索出符合条件的key(C API):

  void tctdbqryaddcond(TDBQRY *qry, const char *name, int op, const char *expr);

  Name即字段名,op代表操作类型,expr为操作对象。

  Op操作类型可以分为两类:字符型运算和数值型运算。

  数值型运算符:

  NUMEQ:表示等于操作对象的数值(=)。

  NUMGT:表示比操作对象的数值要大(>)。

  NUMGE:表大于或等于操作对象的数值(>=)。

  NUMLT:表示比操作对象的数值要小(<)。

  NUMLE:表示小于或等于操作对象的数值(<=)。

  NUMBT:表示其大小处于操作对象文字段中被逗号分开的两个数值的中间(between 100 and 200)。

  NUMOREQ:表示同操作对象文字段中被逗号分开的多个数值中的其中一个是相同的( IN (100,200,278)) 。

  文本型运算符:

  STREQ:表示与操作对象的文字内容完全相同(=)。

  STRINC:表示含有操作对象文字的内容(LIKE ‘%文字%’)。

  STRBW:表示以操作对象的文字行列开始(LIKE ‘文字%’)。

  STREW:表示到操作对象的文字行列结束(LIKE ‘%文字’) 。

  STRAND:表示包含操作对象的文字行列中右逗号分开部分的字段的全部(name LIKE ‘%文字㈠%’ AND name LIKE ‘%文字㈡%’)。

  STROR:表示包含操作对象文字段中逗号分开部分的其中一部分(name LIKE ‘%文字㈠%’ OR name LIKE ‘%文字㈡%’) 。

  STROREQ:表示与操作对象文字段中逗号分开部分的其中某部分完全相同( name = ‘文字㈠’ OR name =‘文字㈡’ )。

  2、可以对“字段”建立索引,支持UTF-8全文检索(C API):

  bool tctdbsetindex(TCTDB *tdb, const char *name, int type);

  type为索引类型,值如下:

  TDBITLEXICAL:创建文本型索引

  TDBITDECIMAL:创建数值型索引

  TDBITTOKEN:创建标记倒排索引

  TDBITQGRAM:创建q-gram倒排索引

  TDBITOPT:优化索引

  TDBITVOID:删除索引

  3、支持按“字段”排序(C API):

  void tctdbqrysetorder(TDBQRY *qry, const char *name, int type);

  type为排序类型,值如下:

  STRASC:表示按照文本型字段内的文本内容在字典中排列顺序的升序。

  STRDESC:表示按照文本型字段内的文本内容在字典中排列顺序的降序。

  NUMASC:表示按照数值大小的升序。

  NUMDESC:表示按照数值大小的降序。

  4、支持检索结果数量限制(C API):

  void tctdbqrysetlimit(TDBQRY *qry, int max, int skip);

  相当于SQL语句中的“limit skip, max”

  TCTDB表格型数据库的不足之处:

  1、功能的增强,也就意味着要牺牲一些性能。TCTDB表格型数据库的平均读取速度大约在40万条/秒,相比TCHDB哈希数据库的180万条/秒和TCBDB B+Tree数据库的100万条/秒要慢一些。

  2、TCTDB虽然可以建立数值型索引,但是它是将所有value数据都当成字符型来处理的,无法区分value类型。

  3、TCTDB单数据库文件存储的记录数上亿条后,性能会有比较明显的下降。

  4、没有可扩展的能力,如果单机无法满足要求,只能通过主从复制的方式扩展。

  5、UPDATE更新方式效率低。

0
相关文章