清风 2009年08月07日 星期五 00:00 | 2192次浏览 | 3条评论
我BLOG原文:
http://qingfeng.github.com/2009/08/06/TokyoCabinet-Abstract-Database-API/
简介
抽象データベースは、オンメモリハッシュデータベースとオンメモリツリーデータベースとハッシュデータベースとB+木データベースと固定長データベースとテーブルデータベースを同一のAPIで抽象化したデータベースです。それを扱うのが抽象データベースAPIです。`tcadb.h' にAPIの仕様の完全な記述があります。
Tokyo Cabinet的数据结构分为
1.Hash结构
2.B+Tree
3.定长数据库
但无论哪种数据结构,最后都会抽象为以下操作,以及分别对应不同的API
put
Hash: bool tchdbput2(TCHDB *hdb, const char *kstr, const char *vstr);
B+Tree: bool tcbdbput2(TCBDB *bdb, const char *kstr, const char *vstr);
Table: bool tctdbput3(TCTDB *tdb, const char *pkstr, const char *cstr);
get
Hash: char *tchdbget2(TCHDB *hdb, const char *kstr);
B+Tree: char *tcbdbget2(TCBDB *bdb, const char *kstr);
Table: char *tctdbget3(TCTDB *tdb, const char *pkstr);
这样,就为开发相应的接口,增加了不少复杂度,需要针对不同的数据结构,去调用不同的API,但Abstract Database API有效减少了这个麻烦,看下面的代码
TCADB *adb = tcadbnew();
if(!tcadbopen(adb, dbname)) {
fprintf(stderr, "open error: %s\n", dbname);
}
tcadbput2(adb, key, value);
if(!tcadbclose(adb)){
fprintf(stderr, "close error:");
return 0;
}
tcadbdel(adb);
一个tcadbput2,就可以代替所有的put方法了,adb是通过判断所操作数据库的扩展名,来决定调用哪种数据库的API,扩展名对应如下:
Hash: .tch
B+Tree: .tcb
定长数据库: .tcf
特殊API的调用
在特殊情况下,不同的数据结构,又提供了一些自己独有的API,例如B+Tree,可以添加重复的key,这时就需要用到tcbdbputdup2方法,用adb如何调用呢,看代码
TCADB *adb = tcadbnew();
if(!tcadbopen(adb, dbname)) {
fprintf(stderr, "open error: %s\n", dbname);
}
tcbdbputdup2(adb->bdb, key, value);
if(!tcadbclose(adb)){
fprintf(stderr, "close error:");
return 0;
}
tcadbdel(adb);
通过adb->bdb就可以指定现在的抽象数据库为一个B+Tree数据库,其他数据库的获取方式如下:
Hash: adb->hdb
B+Tree: adb->bdb
定长数据库: adb->fdb
Zeuux © 2024
京ICP备05028076号
回复 夏清然 2009年08月07日 星期五 11:54
-- 以前看到日本人对Tokyo Cabinet的介绍