kvdb是一个基于B+ Tree的简单KV数据库。这不是一个实用的项目,主要目的是学习B+ Tree的应用。
软件架构说明详见 doc/design.ppt。
先下载代码到你本地,现在只支持Linux。
git clone git@gitee.com:mphyatyh/kvdb.git
编译
cd kvdb/src
make
编译完成之后,在这个目录下应该有如下两个文件:
kv -- 用于测试的命令行程序
libkvdb.so -- 这个是这个数据库的动态链接库文件。
kv help -- this message
kv get <key> -- get a key
kv put <key> <val> -- set key
kv del <key> -- delete a key
kv list -- list all key in the db
kv ins <start_seq> <num> -- insert records in batch mode
kv clr -- remove all records in the database
kv verify -- get all records and verify them
上面是kv支持的命令,说明如下:
kv get
查找一个key
kv put
插入或者更新一条记录
kv del
删除一条记录
kv list
列出数据库中所有记录。
kv ins <start_seq>
批量插入记录,start_seq是起始的序号。这个命令在插入记录的时候,用key = crc64(start_seq + i)作为key,用value = crc64(key)作为值。这样做的目的有两个:(1)用顺序的序号seq来产生伪随机的key,这样可以模拟真实的随机插入。(2)用key的crc64值作为value,这样可以在插入之后读出这个value与key的crc64值比较做校验。
kv clr
清空所有记录,尚未实现。
kv verify
校验数据库中用kv ins命令插入的所有记录,尚未实现。
在其他App中调用kvdb提供的API。
struct kvdb_s;
typedef struct kvdb_s *kvdb_t;
上面的kvdb_t是数据的描述符,这个描述符代表一个数据库文件,通过调用kvdb_open可以得到一个描述。在一个应用程序中可以同时打开多个数据库文件。以后的get/put/del等操作都需要用到这个描述符,数据库用完之后,需要调用kvdb_close关闭这个库文件。
kvdb_t kvdb_open(char *name);
int kvdb_close(kvdb_t db);
int kvdb_get(kvdb_t db, uint64_t k, uint64_t *v);
int kvdb_put(kvdb_t db, uint64_t k, uint64_t v);
int kvdb_del(kvdb_t db, uint64_t k);
struct cursor_s;
typedef struct cursor_s *cursor_t;
cursor_t kvdb_open_cursor(kvdb_t db, uint64_t start_key, uint64_t end_key);
int kvdb_get_next(kvdb_t db, cursor_t cs, uint64_t *k, uint64_t *v);
int kvdb_del_next(kvdb_t db, cursor_t cs, uint64_t *k, uint64_t *v);
void kvdb_close_cursor(kvdb_t db, cursor_t cs);
上面的函数时用来执行批量操作的:(1)查找key在一个范围内的所有记录;(2)删除key落入一个范围内的所有记录。注意:范围包括start_key,但不包括end_key。
kvdb_del_next() -- 这个函数还没有实现。
插入性能,1000万条记录,耗时700sec。平均插入每条记录耗时70us。
total: 9983000 in 700 sec, avarage: 70 us/record
last 1 sec: 15500, avarage: 64 us/record
total: 9998300 in 701 sec, avarage: 70 us/record
last 1 sec: 15300, avarage: 65 us/record
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )