清风

清风的博客

他的个人主页  他的博客

Tokyo Cabinet Abstract API

清风  2009年08月07日 星期五 00:00 | 2084次浏览 | 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哲思注册吗?现在 注册 !
夏清然

回复 夏清然  2009年08月07日 星期五 11:54

"東京収納棚: 世界最強絶対無敵電光石火疾風迅雷資料基盤管理器"

-- 以前看到日本人对Tokyo Cabinet的介绍

0条回复

清风

回复 清风  2009年08月07日 星期五 00:00

建议增加一个可以美化代码的标签吧?

1条回复

暂时没有评论

Zeuux © 2024

京ICP备05028076号