Lock Less Key Value数据结构

时间:2014-07-15 07:00:56

标签: multithreading algorithm data-structures key-value lockless

我需要一个数据结构来存储500k密钥,每个密钥都包含一些相关数据。 150个线程将同时运行&访问密钥。一天之内,我需要更新数据结构,因为可能存在一些操作操作,例如删除密钥,添加新密钥或更改数据。 当数据结构更新正在进行时,我无法阻止150个线程中的任何一个访问它。 我不想使用像memcache或redis这样的当前哈希实现,因为密钥的数量可能会在将来增长。我想要内存访问以加快查找速度? 相反,我更喜欢C / C ++中的一些数据结构实现。

2 个答案:

答案 0 :(得分:1)

Userspace RCU库包含一组在RCU帮助下实现的并发数据结构。其中包括基于文章

的无锁可调整大小的哈希表
  • Ori Shalev和Nir Shavit。拆分列表:无锁 可扩展的哈希表。 J. ACM 53,3(2006年5月),379-405。
  • Michael,M。M.高性能动态无锁哈希表 和基于列表的集合。在第十四届年度ACM会议记录中 并行算法和架构研讨会,ACM Press, (2002),73-82。

有关详细信息,您可以在http://git.lttng.org/?p=userspace-rcu.git;a=blob;f=rculfhash.c

中查看实施中的评论

答案 1 :(得分:1)

LMDB可以处理这个http://symas.com/mdb/因为它使用MVCC,所以作者不会阻止读者。你可以更新任何/每当你的150个阅读器线程运行得很好。 LMDB读取执行无阻塞操作,并在任意数量的CPU上完美线性扩展。

(免责声明:我是LMDB的作者)