了解KeyValue嵌入式数据存储区与FileSystem

时间:2014-09-07 23:05:38

标签: file key-value leveldb

我有一个关于FileSystem用法的基本问题 我想使用嵌入式KeyValue存储,它非常面向写入。 (持久)说我的值大小是 a)10 K. b)1M 并且读取和更新的数量相等

我不能简单地创建包含值的文件,并且名称作为键。

与将KeyValue商店用作LevelDB或RocksDB一样快。

任何人都可以帮助我理解。

1 个答案:

答案 0 :(得分:19)

原则上,是的,文件系统可以用作键值存储。只有当您查看实现中的个别用例和限制时,才会出现差异。

这里没有太多细节,有些事情可能会有很大不同:

  • 文件系统将数据拆分为固定大小的块。两个文件通常不能占用同一块的部分。常见的块大小为4-16 KiB;你可以计算你的10 KiB例子会产生多少开销。键/值存储倾向于考虑较小尺寸的数据。
  • 文件系统中的目录索引通常无法按排序顺序有效地迭代文件名/键。您可以有效地查找特定键,但是如果不读取所有目录条目,则无法检索范围。一些键/值存储(包括LevelDB)支持有效的有序迭代。
  • 某些键/值存储(包括LevelDB)是事务性的。这意味着您可以将多个更新捆绑在一起,LevelDB将确保所有这些更新都通过,或者没有一个更新。这对于防止数据不一致非常重要。文件系统使实现起来更加困难,特别是涉及多个文件时。
  • 键/值存储通常会尝试将数据保持在磁盘上连续(因此可以使用较少的搜索来检索数据),而现代文件系统故意不跨文件执行此操作。在阅读许多记录时,这会严重影响性能。但是,这不是固态磁盘上的问题。
  • 虽然某些文件系统确实提供压缩功能,但它们通常是每个文件或每个块。据我所知,LevelDB压缩整个记录块,可能产生更好的压缩(尽管它们将压缩策略偏向于性能而不是压缩效率)。