2个不稳定版本
0.3.0 | 2022年8月28日 |
---|---|
0.1.0 | 2022年7月5日 |
#106 in 数据库实现
8MB
431 行
Langmore
基于预写日志的键值存储
Langmore设计
Langmore
使用了大量日志结构化文件系统的原则,并从涉及日志文件合并的多个设计中汲取灵感。它本质上只是一个包含固定结构和内存中索引的追加(日志)文件目录,该索引持有映射到大量必要信息的键,这些信息对于点查找至关重要——即数据文件中的条目。
数据文件
它们是追加日志文件,包含键值对和一些元信息。单个Langmore
实例可以有多个数据文件,其中只有一个将是活动的并用于写入,而其他则被视为不可变的,仅供读取。
数据文件中的每个条目都有上述固定的结构,并存储CRC
、timestamp
、key_size
、value_size
、actual_key
和actual_value。在引擎上执行的所有的写操作——创建、更新和删除——都转换为该活动数据文件中的条目。当该活动数据文件达到大小阈值时,它被关闭,并创建一个新的活动数据文件。当关闭(故意或无意)时,该数据文件被视为不可变的,并且永远不会再打开进行写入。
KeyDir
它是一个内存中的哈希表,存储Langmore实例中所有存在的键,并将其映射到数据文件中日志条目(值)所在的偏移量;从而便于点查找。哈希表中的映射值是一个结构,包含file_id
、offset
和一些如时间戳之类的元信息,如以下所示。
部署
使用以下命令构建项目
$ make build
或使用cargo安装
$ cargo install langmore
定义配置并运行Langmore
二进制文件。
export HOSTNAME=127.0.0.1:8080
export STORAGE_DIR=/etc/langmore
$ ./target/debug/langmore
用法
您可以使用netcat
与Langmore
进行交互
$ 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