7 Star 65 Fork 35

mphyatyh / kvdb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-2-Clause

kvdb

介绍

kvdb是一个基于B+ Tree的简单KV数据库。这不是一个实用的项目,主要目的是学习B+ Tree的应用。

软件架构

软件架构说明详见 doc/design.ppt。

安装教程

  1. 先下载代码到你本地,现在只支持Linux。

    git clone git@gitee.com:mphyatyh/kvdb.git

  2. 编译

    cd kvdb/src

    make

    编译完成之后,在这个目录下应该有如下两个文件:

    kv -- 用于测试的命令行程序

    libkvdb.so -- 这个是这个数据库的动态链接库文件。

使用说明

  1. 简单测试,可以用命令行程序kv执行插入、删除、查找等操作。
   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命令插入的所有记录,尚未实现。

  1. 在其他App中调用kvdb提供的API。

    • kvdb_t
   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);
  • kvdb_open - 打开数据库文件。
  • kvdb_close - 关闭数据库文件。数据用完之后,必须关闭文件,否则可能会出现丢数据的情况。
  • kvdb_get - 在数据库查找key为k的记录。如果找到返回0,并把value存放到v中。如果没找到,返回-1。
  • kvdb_put - 把key和value分别为k和v的记录存放到数据库中。如果k已经存在,则更新它的v。否则新增一条记录。
  • kvdb_del - 删除key为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

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
BSD 2-Clause License Copyright (c) 2021, mphyatyh All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

一个基于B+ Tree的简单KV数据库。这不是一个实用的项目,主要目的是学习B+ Tree的应用。 展开 收起
C 等 3 种语言
BSD-2-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/mphyatyh/kvdb.git
git@gitee.com:mphyatyh/kvdb.git
mphyatyh
kvdb
kvdb
master

搜索帮助