2014-07-15 105 views
1

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

+0

的简单方法是存储在数据库中的密钥和需要时阅读的关键。 – Ali786

+3

如果更新一天只进行一次,为什么不复制 - 修改 - 替换(交换)?也就是说,使它不可变。 – 9dan

回答

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

LMDB看到实施意见可以处理这个http://symas.com/mdb/由于它采用MVCC,作家不阻止读取。你可以更新任何/每当你的150读者线程将运行得很好。 LMDB读取不执行任何阻塞操作,并可在任何数量的CPU上完美线性扩展。

(声明:我是LMDB的作者)