我需要一个数据结构来存储500k密钥,每个密钥都包含一些相关数据。 150个线程将同时运行&访问密钥。一天之内,我需要更新数据结构,因为可能存在一些操作操作,例如删除密钥,添加新密钥或更改数据。 当数据结构更新正在进行时,我无法阻止150个线程中的任何一个访问它。 我不想使用像memcache或redis这样的当前哈希实现,因为密钥的数量可能会在将来增长。我想要内存访问以加快查找速度? 相反,我更喜欢C / C ++中的一些数据结构实现。
答案 0 :(得分:1)
Userspace RCU库包含一组在RCU帮助下实现的并发数据结构。其中包括基于文章
的无锁可调整大小的哈希表有关详细信息,您可以在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的作者)