2个不稳定版本

0.3.0 2022年8月28日
0.1.0 2022年7月5日

#106 in 数据库实现

MIT 许可证

8MB
431

Langmore

基于预写日志的键值存储

Langmore设计

Langmore使用了大量日志结构化文件系统的原则,并从涉及日志文件合并的多个设计中汲取灵感。它本质上只是一个包含固定结构和内存中索引的追加(日志)文件目录,该索引持有映射到大量必要信息的键,这些信息对于点查找至关重要——即数据文件中的条目。

数据文件

它们是追加日志文件,包含键值对和一些元信息。单个Langmore实例可以有多个数据文件,其中只有一个将是活动的并用于写入,而其他则被视为不可变的,仅供读取。

数据文件中的每个条目都有上述固定的结构,并存储CRCtimestampkey_sizevalue_sizeactual_keyactual_value。在引擎上执行的所有的写操作——创建、更新和删除——都转换为该活动数据文件中的条目。当该活动数据文件达到大小阈值时,它被关闭,并创建一个新的活动数据文件。当关闭(故意或无意)时,该数据文件被视为不可变的,并且永远不会再打开进行写入。

KeyDir

它是一个内存中的哈希表,存储Langmore实例中所有存在的键,并将其映射到数据文件中日志条目(值)所在的偏移量;从而便于点查找。哈希表中的映射值是一个结构,包含file_idoffset和一些如时间戳之类的元信息,如以下所示。

部署

使用以下命令构建项目

$ make build

或使用cargo安装

$ cargo install langmore

定义配置并运行Langmore二进制文件。

export HOSTNAME=127.0.0.1:8080
export STORAGE_DIR=/etc/langmore

$ ./target/debug/langmore

用法

您可以使用netcatLangmore进行交互

$ nc 127.0.0.1 8080

版本控制

为了使我们的发布周期透明并努力保持向后兼容性,Langmore遵循语义版本控制指南,发布过程可预测且对商业友好。

请参阅我们GitHub项目的发布部分以获取Langmore每个发布版本的变更日志。它包含了对每个版本所做的最显著的变更的摘要。

错误跟踪器

如果您有任何建议、错误报告或烦恼,请将它们报告给我们的问题跟踪器https://github.com/clivern/langmore/issues

安全问题

如果您在Langmore中发现安全漏洞,请发送电子邮件至[email protected]

贡献

我们是一个开源、社区驱动的项目,所以请随时加入我们。有关更多详细信息,请参阅贡献指南

许可证

© 2022, clivern。在MIT许可证下发布。

Langmore@Clivern编写和维护。

依赖项

~3–10MB
~91K SLoC