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的作者)