database - 具有固定大小键和值的基于磁盘的 B+ 树实现

标签 database data-structures relational-database b-tree

有没有提供基于磁盘的B+树实现的库,专门针对所有键大小固定,所有值也大小固定(不一定与键固定大小相同)的场景设计的?

注意:是的,我想实现另一个玩具,概念验证 RDBMS。还有 a very good reason为什么我不使用 SQL DBMS。 笔记结束。

我并不特别介意库是用什么语言编写的。但是,我对库的功能有一些特定的要求。为了清楚起见,将使用 C 语言编写的示例来说明这些要求。

库必须足够灵活以允许我使用自己的比较函数。例如:

struct comparer
{
    void * extra;
    int (*function)(
        void *, // closure over extra
        char *, // 1st value to be compared
        char *  // 2nd value to be compared
    );
};

索引文件的操作机制由所有键的固定长度、所有值的固定长度以及键的比较函数定义。例如:

struct index_spec
{
    size_t keylen, vallen;  // fixed lengths for keys and values
    struct comparer comp;   // comparison function for keys
};

如果库在可查询索引和可更新索引之间建立区别,并在预期可查询索引时使用可更新索引的机制,而不是相反,那将是一个非常好的接触(虽然不是强制性的)。例如:

struct queryable_index
{
    struct index_spec spec;
    FILE * file;            // opened in read mode
};

struct updateable_index
{
    struct index_spec spec;
    FILE * file;            // opened in read/write mode
};

struct queryable_index open_queryable_index
    (struct index_spec, const char *);

struct updateable_index open_updateable_index
    (struct index_spec spec, const char * filename);

struct queryable_index just_queryable_index
    (struct updateable_index index)
{
    struct queryable_index result;
    result.spec = index.spec;
    result.file = index.file;
    return result;
}

最佳答案

据我所知,最好的实现是 Berkeley DB .它是一个高性能的嵌入式数据库系统,具有非常好的 B 树实现,由 Sleepycat 开发,后来被 Oracle 收购。

它是用C语言编写的,支持你所追求的使用场景。它是开源的,如果您想构建自己的实现,代码是寻找灵感的好地方。

玩得开心!

关于database - 具有固定大小键和值的基于磁盘的 B+ 树实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291428/

相关文章:

php - Laravel 4,eloquent mysql 表设计问题

php - 两个不同查询之间的速度

django - 在 Postgres 中表示政策人口数据的最佳方式

java - java高效地将数据插入数据库

c - 数据结构和患者记录

sql - 如何在不列出列的情况下对每一列执行相同的聚合?

python - SQLite3 和 Python 3 - 字符串错误 "no such column"而不是整数

C 编译 - "undefined reference to"?

c - 自引用结构的大小

sql - 候选键和主键有什么区别?