我正在寻找关于内存键值存储引擎或库的建议,这些引擎或库具有C++接口或使用C++编写。C++内存中键值存储
我正在寻找能没有任何问题扩展到约100mill键值对,并且兼容/编译Linux和Win32的解决方案/ 64
我正在寻找关于内存键值存储引擎或库的建议,这些引擎或库具有C++接口或使用C++编写。C++内存中键值存储
我正在寻找能没有任何问题扩展到约100mill键值对,并且兼容/编译Linux和Win32的解决方案/ 64
如何std::map
?
http://cplusplus.com/reference/stl/map/
我认为在内存中存储100个密钥值对并不是一个好主意。
也许我会用像沙发-DB
的std ::地图细给出的关键在于规模和价值小,可用内存(约1亿双)大。 如果不是这种情况,并且您希望通过键值对运行程序,请考虑使用标准的MapReduce API。 Map Reduce专门用于分布式系统并处理大型数据,特别是键值对。 Map Reduce也有很好的C++ API。 http://en.wikipedia.org/wiki/MapReduce
尝试FastDB,虽然你可能会得到超过你的要求。东京内阁似乎也支持内存数据库。 (或者,由mmap映射的文件支持。对于现代操作系统,由于操作系统缓存使后者非常高效,因此“in-ram”数据库与mmap之间没有太大区别)。
如果你真的需要在内存中存储这么多的对,请考虑这个Sparse Hash。它有特殊的实现,针对低内存消耗进行了优化。
尝试东京内阁,它支持哈希表和B +树:
哈希映射(也称为无序地图)是许多对最好的选择。你可以在Boost和TR1中找到一个实现。有人质疑这个尺寸 - 如果他有一台64位服务器,那么就有足够的空间容纳1亿个kv对。
我想要一些持久性机制,可能是磁盘或网络。 – Hippicoder 2010-06-26 15:14:07
然后你需要获得一个数据库。 – Puppy 2010-06-26 15:22:09
添加或删除时,这可能最终导致内存碎片问题。 – NickD 2010-07-13 10:32:49
Oracle Berkeley_db是您需要的。
你有任何重复的键/值或所有唯一? – 2010-06-26 04:19:00
“需要扩展到大约1亿个键值对”和“在内存中”的要求将会彼此矛盾。可以同时满足这两个要求,但要问的第一个问题是你是否需要满足两者。键/值真的必须在内存中吗? – 2010-06-26 09:19:06
@Chris:它可以有重复的键,所以它会像std :: multimap或std :: multiset – Hippicoder 2010-06-26 15:12:52