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

Raj*_*aur 10 file key-value leveldb

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

我只是创建包含值的文件,并且名称作为键.

它不像使用KeyDB或RocksDB这样的KeyValue存储一样快.

请有人帮我理解.

Jan*_*ger 19

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

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

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

  • 所以你能建议,如果价值大小(比如5 MB),模式是看,更新,存储; 使用kv商店是有道理的.另外说创建500 K文件会对文件系统产生不良影响 (2认同)