2010-03-16 73 views
3

我正在尋找一個用C編寫的關鍵字 - >值字典庫,它支持理論上無限數量的廉價交易。你知道一個支持COW事務的C字典嗎?

我想在內存中有一個字典,有數百個線程開始事務,可能會修改字典,結束(完成)事務或可能中止事務。這些線程只有50%的時間會實際修改字典。

我看過的大多數字典事務實現總是複製,而不是在寫入時複製,無論事務何時開始。鑑於字典的預期大小(> 1GB),我希望能夠在交易過程中發生事實變化時才能找到一些COW。我也希望大多數主要的GNU/Linux發行版都包含這些東西。

任何建議或鏈接都​​非常感謝。

回答

1

SQLite3是事務性的,可以完全存在in memory。它不是便宜,因爲一些人可能會喜歡交易,但不是所有昂貴的。一個快速的mlock()/ mlockall()可以防止數據庫被分頁,YMMV和posix_madvise()。它不是開箱即用的解決方案,但不太難以適應。

BDB是Oracle目前銷售的另一種選擇。

SQLite3完全符合我的需求(幾乎)。鑑於我通過詢問這個問題贏得了Tumbleweed badge,我能做的至少是回答它。

1

對於基本的字典需求,SQLite是否過分矯枉過正?通常如果你不打算執行查詢,數據庫的開銷是不必要的。我很想把它融入到我的一些項目中一段時間​​,肯定聽起來你可以從它的性能提升中受益。

最簡單的解決方案可能是創建一個包裝類(即COWString),它將實現寫時複製行爲,然後創建包裝對象的stl :: map或hash_map。這樣,您就可以從容器邏輯中抽取COW邏輯,這也將使您不必編寫自己的容器類和其中的巨大複雜性。

+0

它的交易,讓你,尤其是數百線程使用普通的快速互斥體來控制它們。我花了相當多的時間嘗試一些東西。 SQLite接近我自己的堆棧配置文件(就地塊說,無論如何),並提供更多的靈活性。 – 2010-03-24 12:23:26

相關問題