[英]Disk-based B+-tree implementation with fixed-size keys and values
是否有任何库提供基于磁盘的B + -tree实现,专门针对所有键具有固定大小并且所有值也具有固定大小的场景(不一定与键的固定大小相同)?
注意:是的,我想实现另一个玩具,概念验证RDBMS。 我没有使用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 。 它是一个高性能的嵌入式数据库系统,具有由Sleepycat开发的非常好的B树实现,后来被Oracle收购。
它是用C语言编写的,支持您使用的使用场景。 它是开源的,如果您希望构建自己的实现,代码是寻找灵感的好地方。
玩得开心!
LevelDB: “leveldb库提供持久的键值存储。键和值是任意字节数组。键是根据用户指定的比较器函数在键值存储区内排序的。”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.