cdb
cdbはdaemontoolsやqmailの作者でもあるdjbこと
Daniel J.Bernstein氏によって作成されたデータベースマネージャ。
かなり高速に動作するが、一度追加したものは削除したり、
更新することはできない。(どうしてもやるなら再構築するしかない)
以下、tinycdbを使ったCのサンプル。
make.c
#include <stdio.h> #include <string.h> #include <fcntl.h> #include <cdb.h> int main(int argc, char *argv[]){ struct cdb_make cdbm; int fd; char *key = "abc", *value = "def"; unsigned int klen, vlen; klen = strlen(key); vlen = strlen(value); fd = open("tmpfile", O_RDWR|O_CREAT, 0644); cdb_make_start(&cdbm, fd); cdb_make_put(&cdbm, key, klen, value, vlen, CDB_PUT_INSERT); cdb_make_exists(&cdbm, key, klen); cdb_make_finish(&cdbm); rename("tmpfile", "cdbfile"); return 0; }
read.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <cdb.h> int main(int argc, char *argv[]){ int fd; struct cdb cdb; char *key = "abc", *value; unsigned int klen, vlen, vpos; klen = strlen(key); fd = open("cdbfile", O_RDONLY); cdb_init(&cdb, fd); if (cdb_find(&cdb, key, klen) > 0) { vpos = cdb_datapos(&cdb); vlen = cdb_datalen(&cdb); value = malloc(vlen); cdb_read(&cdb, value, vlen, vpos); printf("value=%s\n", value); free(value); } return 0; }
実行結果
narazuya@bokkko% ls make.c read.c narazuya@bokkko% gcc -o makecdb make.c -lcdb narazuya@bokkko% gcc -o readcdb read.c -lcdb narazuya@bokkko% ./makecdb narazuya@bokkko% ls cdbfile make.c makecdb read.c readcdb narazuya@bokkko% ./readcdb value=def narazuya@bokkko%
ちなみに各種DBMのベンチマークがTokyoCabinetのページにある。