【问题标题】:C++ in-memory Key-Value storesC++ 内存键值存储
【发布时间】:2011-03-08 13:12:13
【问题描述】:

我正在寻找有关具有 C++ 接口或用 C++ 编写的内存键值存储引擎或库的建议。

我正在寻找可以毫无问题地扩展到大约 100 个键值对并且在 linux 和 win32/64 上兼容/可编译的解决方案

【问题讨论】:

  • 您是否有任何重复的键/值或全部唯一?
  • “需要扩展到大约 1 亿个键值对”和“在内存中”的要求将相互矛盾。两者都满足是可能的,但首先要问的问题是你是否需要同时满足两者。键/值真的必须在内存中吗?
  • @Chris:它可以有重复的键,所以它有点像 std::multimap 或 std::multiset
  • 首先,是不是所有的key都可以提前确定,还是需要能够不断的插入/擦除key?如果它只是您加载的静态表并且只需要在运行时查找,则将其作为排序数据连续存储在向量中并使用 binary_search 可能就足够了。

标签: c++ key-value in-memory


【解决方案1】:

【讨论】:

    【解决方案2】:

    std::map 很好,因为键和值的大小很小并且可用内存很大(大约 1 亿对)。 如果不是这种情况,并且您想在键值对上运行程序,请考虑使用标准 MapReduce API。 Map Reduce 专门用于分布式系统和处理大数据,特别是键值对。 Map Reduce 也有很好的 C++ API。 http://en.wikipedia.org/wiki/MapReduce

    【讨论】:

      【解决方案3】:

      试试FastDB,虽然你得到的可能比你要求的要多。东京内阁似乎也支持内存数据库。 (或者,由 mmap 映射的文件支持。在现代操作系统中,“in-ram”数据库和 mmap 数据库之间没有太大区别,因为操作系统缓存也使后者非常高效)。

      【讨论】:

        【解决方案4】:

        如果您确实需要在内存中存储如此多的对,请考虑使用 Sparse Hash。它具有针对低内存消耗进行优化的特殊实现。

        【讨论】:

          【解决方案5】:

          试试 Tokyo Cabinet,它支持 hashtables 和 B+trees:

          http://1978th.net/tokyocabinet/

          【讨论】:

          • 链接已损坏!
          【解决方案6】:

          哈希映射(也称为无序映射)是这么多对的最佳选择。您可以在 Boost 和 TR1 中找到实现。

          编辑: 有人质疑它的大小——如果他有一台 64 位服务器,那么就有足够的空间容纳 1 亿千伏对。

          【讨论】:

          • 我想要一些持久性机制,可能是磁盘或网络。
          • 那你需要得到一个数据库。
          • 这可能会导致添加或删除时出现内存碎片问题。
          【解决方案7】:

          Oracle Berkeley_db 是您所需要的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-15
            • 2021-06-11
            • 2011-07-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多