【问题标题】:Highly efficient key-value storage in CC中的高效键值存储
【发布时间】:2021-06-11 21:45:40
【问题描述】:

满足以下设计目标的最有效的键值对存储算法是什么?

  1. 数据存储在磁盘上,以避免软件/计算机未正常关闭时数据丢失
  2. 数据由单个应用程序读取/写入
  3. 在台式机上运行,​​因此需要使用最少的内存、处理和存储,从而最大限度地减少对用户计算机性能的影响
  4. 必须支持每秒多次(2 到 3 次)插入/更新
  5. 预计总共只有几千条记录,但其中一些记录会经常更新(即更新比插入多很多倍)
  6. 数据每天只检索几次(2 到 3 次)
  7. 使用单个主数字键(即短键)写入和检索数据
  8. 需要经常更新用于过滤和排序检索数据的辅助字段(即“键”或“列”)
  9. 主键不能更改(即不需要更改)
  10. 不需要删除记录(即不支持删除)
  11. 应用程序还将存储与密钥(主要和次要)关联的非结构化(即用户所需的任何内容)数据
  12. 与密钥关联的数据可以更新
  13. 始终以有序列表的形式检索数据:
    一种。从头开始,或者
    湾。按辅助键过滤

计划在 C 应用程序中使用它。选择的主要标准是尽可能绝对轻量和快速。

【问题讨论】:

    标签: dictionary hash key-value-store


    【解决方案1】:

    对于 C/C++,我知道有这种可用的变体

    1. https://www.sqlite.org/
    2. https://github.com/erthink/libmdbx

    【讨论】:

    • 特别是 sqilte-lsm-ext.
    • 感谢 vodolaz 和 amirouche 的建议。 sqlite 和 libmdbx 比我想要的还要重。我正在考虑我可以用 C 编写的东西,或者一个非常小的库来实现某种类型的哈希算法、二叉树或其他东西。
    【解决方案2】:

    经过大量研究,我决定使用 LevelDB 来解决这个问题。它很容易构建为静态库,并且在我的代码中使用起来非常简单。它速度超级快,而且文件很小。

    【讨论】:

      猜你喜欢
      • 2012-04-21
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      相关资源
      最近更新 更多