I need a data structure to store 500k keys, each one with some associated data. 150 Threads will be running concurrently & accessing the keys. Once in a day I need to update the data structure since there may be some manipulation operation, say the key is deleted, new key is added or the data is changed. When the data structure updation is in progress I can not block any of the 150 threads from accessing it. I don't want to use current hash implementations like memcache or redis since the number of keys may grow in future & I want in-memory access for faster lookup? Instead will prefer some data structure implementation in C/C++.
问问题
642 次
2 回答
1
LMDB 可以处理这个http://symas.com/mdb/由于它使用 MVCC,作者不会阻止读者。您可以随时/随时更新,您的 150 个阅读器线程将运行良好。LMDB 读取不执行任何阻塞操作,并且可以在任意数量的 CPU 上完美线性扩展。
(免责声明:我是LMDB的作者)
于 2014-08-11T08:08:21.630 回答
1
用户空间 RCU库包含一组在 RCU 的帮助下实现的并发数据结构。其中一个基于文章的无锁可调整大小的哈希表
- Ori Shalev 和 Nir Shavit。拆分有序列表:无锁可扩展哈希表。J. ACM 53,3(2006 年 5 月),379-405。
- Michael, MM 高性能动态无锁哈希表和基于列表的集合。在第十四届 ACM 并行算法和架构年度研讨会论文集上,ACM 出版社,(2002),73-82。
有关更多信息,您可以在http://git.lttng.org/?p=userspace-rcu.git;a=blob;f=rculfhash.c上查看实现中的评论
于 2014-07-15T08:03:45.913 回答