无锁键值数据结构



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

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

的无锁可调整大小的哈希表
  • Ori Shalev和Nir Shavit。分序列表:无锁可扩展哈希表。[j] .中国农业科学,2006 (5),379-405.
  • Michael, M. M.高性能动态无锁散列表以及基于列表的集合。第14届美国计算机学会年会论文集并行算法和架构研讨会,ACM出版社,(2002), 73 - 82。

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

查看实现中的注释。

LMDB可以处理这个http://symas.com/mdb/因为它使用MVCC,所以写入器不会阻塞读取器。你可以随时更新任何内容,你的150个阅读线程将运行得很好。LMDB读取不执行任何阻塞操作,并且可以在任意数量的cpu上完全线性扩展。

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

相关内容

  • 没有找到相关文章

最新更新