#bindings #cdb #database

mtbl

绑定到MTBL C库(https://github.com/farsightsec/mtbl)

3个不稳定版本

使用旧的Rust 2015

0.2.1 2017年2月17日
0.2.0 2017年1月7日
0.1.0 2016年9月4日

数据库实现中排名127

每月下载量28次
cdbd中使用

MIT/Apache

64KB
1K SLoC

mtbl Rust库

该库提供了一个Rust风格的接口,用于操作mtbl C库,以处理SSTables(一次性写入的有序映射文件)。

SSTables基本上是常驻磁盘映射,类似于CDB(它也有Rust绑定,但是使用有序映射而不是哈希映射。更多信息,请参阅mtbl README)。

mtbl的0.2.X版本涵盖了MTBL C库的0.8版本。

依赖项

为了使用mtbl crate,您必须有一个安装了libmtbl库的Unix系统,该库可以通过pkg-config找到。

在基于Debian的Linux发行版上,安装libmtbl-dev软件包

sudo apt-get install libmtbl-dev

使用方法

Cargo.toml中将mtbl添加为依赖项

[dependencies]
mtbl = "0.2.1"
extern crate mtbl;

// Create a database, using a Sorter instead of a Writer so we
// can add keys in arbitrary (non-sorted) order.
use mtbl::{Sorter,Write};
{
  let mut writer = mtbl::Sorter::create("data.mtbl");
  writer.add("key", "value");
  // Data is flushed to file when the writer/sorter is destroyed.
}

// Read from a database
use mtbl::{Read,Reader};
let reader = mtbl::Reader::open("data.mtbl");
// Get one element
let val: Option(Vec<u8>) = reader.get("key");
assert_eq!(val, Option("value".as_bytes()));
// Or iterate over all entries
for (key: Vec<u8>, value: Vec<u8>) in &reader {
    f(key, value);
}

函数文档

请参阅文档

有关MTBL的更多信息

引用自MTBL文档

mtbl不是一个数据库库。它不提供可更新的键值数据存储,而是公开了创建、搜索和合并SSTable文件的基本操作。与内部使用SSTable数据结构作为其数据存储一部分的数据库不同,SSTable文件的管理(创建、合并、删除、多个SSTable的搜索结果合并)由mtbl库用户自行决定。

mtbl SSTable文件由一系列包含有序键值对的数据块组成,键和值是任意字节数组。数据块可选地使用zlib或Snappy库进行压缩。数据块之后是索引块,允许快速搜索键空间。

mtbl的基本接口是写入器,它接收一系列排序的键值对,没有重复的键,并将它们写入SSTable输出文件的数据块中。包含对数据块的偏移量和每个数据块中最后一个键的索引存储在内存中,直到写入器对象关闭,此时索引被写入SSTable文件的末尾。这允许SSTable文件仅使用顺序I/O操作单次写入。

一旦写入,SSTable文件可以使用mtbl读取器接口进行搜索。搜索可以根据精确键匹配、键前缀匹配或键范围检索键值对。结果通过简单的迭代器接口检索。

mtbl库还提供了两个实用接口,便于进行批量数据加载的排序和合并工作流程。排序接口接收任意顺序的键值对,并按顺序提供它们,根据需要将它们缓冲到磁盘。合并接口同时从多个SSTable文件中读取,并按顺序提供组合输入中的键值对。由于mtbl不允许SSTable文件中有重复的键,因此排序器和合并器接口都需要调用者提供一个合并函数,该函数将在相同键的多个值上进行调用。这些接口也仅使用顺序I/O操作。

为什么选择MTBL而不是CDB或其他常量数据库?

  • 按顺序存储数据使得合并文件变得容易。
  • 压缩是内置的(选项:zlibsnappy)。
  • 库代码稍微现代一些,并使用内存映射文件来具有正确不可变的(因此线程安全的)表示形式——它不会随意操作文件指针。

许可证

版权所有 2016 Leon Barrett

根据以下任一许可证授权:

贡献

除非您明确表示,否则任何有意提交给工作内容并包含在您的工作中的贡献,根据Apache-2.0许可证定义,将如上双许可,不附加任何额外条款或条件。

依赖项

~60KB