2011-05-15 16 views
5

我正在尋找一種簡單的方式來存儲和檢索數百萬個xml文件。目前,所有事情都是在文件系統中完成的,這有一些性能問題。對於簡單和高性能的文件存儲,Bitcask可以嗎?

我們的要求是:存儲數百萬的XML的文件在一個批處理

  1. 能力。 XML文件可能高達幾兆,大部分在100KB範圍內。
  2. 非常快速隨機查找的ID(如文檔的URL)
  3. 允許訪問的Java和Perl中的最重要的Linux發行版
  4. 可用和Windows

我看看幾個的NoSQL -Platforms(如CouchDB的,Riak等),同時這些系統很好看,他們似乎就像矯枉過正beeing:

  1. 沒有聚類所需
  2. 沒有守護進程(「服務」)要求
  3. 沒有聰明的搜索功能所需

已經深入研究深入到了Riak,我發現Bitcask(見intro),這似乎是我想要的東西。介紹中介紹的基礎知識非常有趣。但遺憾的是訪問通過Java一bitcask回購絕非(或者是那裏?)

洙我的問題歸結爲

  • 在下面的假設是正確的:Bitcask模型(追加,只寫,內存中的密鑰管理)是存儲/檢索數百萬個文檔的正確方式
  • 是否有任何通過Java可用的Bitcask的替代方案? (BerkleyDB想起來......)
  • (對於riak專家)Riak與「裸體」Bitcask相比,Riak有很多開銷實施/管理/資源方面的明智嗎?
+1

對於矯枉過正。如果它們使用簡單,並且可以嵌入,它們也可以很適合......可做得越多越能做得更少。 – 2011-05-15 13:46:22

回答

5

我不認爲Bitcask會爲您的使用情況很好地工作。看起來Bitcask模型是針對每個值的大小相對較小的用例而設計的。

問題出在Bitcask的數據文件合併過程中。這涉及將來自多個「較舊的數據文件」的所有活動值複製到「合併的數據文件」中。如果你在每個100Kb的區域有數百萬的值,這是一個瘋狂的數據複製量。

+0

感謝您的意見。將不得不測試它 – KoW 2011-05-16 09:33:46

+0

@ kindofwhat - 好主意。我的答案純粹是基於我閱讀描述其工作原理的論文。另一個想法是問作者... – 2011-05-17 00:10:17

+0

@StephenC我認爲Bitcask模型是專爲價值大得多然後關鍵的情況而設計的。由於bitcask會將所有密鑰放入散列表中,並將散列表放入內存中。所以如果這個值相對較小,那麼你可能有很多密鑰,並且你沒有足夠的內存來存儲整個密鑰。正如你所說,Bitcask具有緊湊的操作。磁盤空間和寫入放大之間存在平衡。如果你害怕寫擴大,你不需要緊湊或者當你需要時可以壓縮。在他的使用案例中,我認爲改變XML數據是一種很少的操作。 – baotiao 2016-04-04 17:54:09

4

根據是否有大量覆蓋,Bitcask可以適用於這種情況(較大的值)。特別是,沒有理由合併文件,除非有大量浪費的空間,這隻有在新值與舊值相同時纔會出現。

Bitcask特別適合這種批處理負載情況,因爲它會將輸入數據流順序寫入磁盤。在大多數情況下,查找將需要一次查找,但如果存在任何時間局部性,則文件緩存將幫助您。

我不確定Java版本/包裝的狀態。

+0

似乎有一個Bitcask API的「本地」Java [實現](https://github.com/krestenkrab/bitcask-java)。雖然合併尚未實現,但很難用此實現來測試這種情況。 – KoW 2011-05-17 10:01:08

相關問題