4 个版本

0.2.0 2019 年 8 月 29 日
0.1.2 2019 年 8 月 26 日
0.1.1 2019 年 8 月 21 日
0.1.0 2019 年 8 月 17 日

#1969编码

MIT/Apache

15KB
203

键值文档存储 (KVDS)

高效的文档编码键值存储。

Build Status crates.io docs.rs license: MIT OR Apache-2.0

跳转到 使用方法

特性

KVDS 是一种编码键值列表的格式,其中键是一个单个 u8,值是一个 Vec(在 Rust 中称为数组)的 u8

工作原理

以下内容为十六进制。

The length of the value, in bytes
         │
       ┌─┴─┐
    14 00 05 48 65 6c 6c 6f
    └┤       └──────┬─────┘
     │              │
The key,    The value, usually a
a number      string in UTF-8
between
0 and 255

以上是一个键值为 20,值为 hello 的键值对。

特性

  • 可以存在多个相同的键
  • 键值对保持顺序
  • 使用高效的编码机制
  • 旨在编码文档,类似于 XML

KVDS 没有内置处理嵌套的方法;然而,考虑到编码后的 KVDS 是一个 Vec<u8>,且值也是 Vec<u8>,嵌套可以在特定情况下轻松实现

KVDS 与 XML 的比较

XML 是编码文档的流行格式。以下是比较。

XML

<1>Hello</1>
<2>, </2>
<4>world</4>
<1>!</1>

在 XML 中,每个 ASCII 字符都是一个字节。因此,上面的列表是 41 字节。

KVDS

01 00 05 48 65 6c 6c 6f
02 00 02 2c 20
04 00 05 77 6f 72 6c 64
01 00 01 21

这里,KVDS 以十六进制表示,这意味着每个字符对是一个字节。列表用 25 字节表示。

与 XML 相比,KVDS 的三个缺点是它不易于人类阅读(对于编码文档来说这不是问题),不支持嵌套(尽管可以轻松实现),并且键只能是一个字节长(这是一个权衡,减少了所需的空间)。

使用方法

此 crate,KVDS,旨在作为 Rust 库使用。有关更多信息,请参阅 基本示例

关于存储字符串的注意事项

值字段中存储的最常见数据类型之一是字符串。在Rust中,可以将以下类型的Vec<u8>转换为String,方法如下

String::from(std::str::from_utf8(&VEC_U8[..])?);

String转换回来的方法如下

STRING.as_bytes().to_vec();

保存到文件

保存到文件的过程在文件示例中有详细说明。如果您想手动读写文件,请参阅旧文件示例

大小限制

键只能是一个字节。因此有256个不同的键。

在64位机器上,值可以高达18.4艾字节。(在32位机器上略超过4GB;在128位机器上,可能性几乎是无限的)。不用说,有非常多的独特组合。

(据我所知,18.4艾字节也是64位CPU的RAM的理论限制)。

仅供参考

KVDS 0.2.x的编码格式与KVDS 0.1.x的编码格式不兼容。

许可证

许可协议为以下之一

任选其一。

贡献

除非您明确声明,否则您提交给工作的任何有意贡献,根据Apache-2.0许可证的定义,将按上述方式双重许可,不附加任何额外条款或条件。

无运行时依赖