2011-09-26 63 views
0

我很喜歡使用DB4O來存儲學習算法的訓練數據。這將包括(潛在地)數以億計的對象。根據我的基準測試,每個對象平均大小爲2K。檢索大量對象的DB4O性能

訓練算法需要重複遍歷整個對象集(可能是10次)。它不關心對象在什麼順序。

我的問題是這樣的:當我從DB4O中檢索一大組對象時,它們是全部加載到內存中的,還是根據需要從磁盤中取出?顯然,將數億個2k對象拉到內存中對於我正在使用的服務器類型(它們大約有19GB內存)是不實用的。

Db4o是一個明智的選擇嗎?

+0

有兩件事情 - 1.每個對象是否都是真正的2k,或者是否有自然的機會來規範化數據?請記住,DB4O是一個對象數據庫,因此可以利用豐富的對象模型。 2我會做一個關於內存中保留內容的實驗。我知道默認情況下,它將對象保存在內存中,但我不知道它是否會將其修剪到對象的外殼,如果它未修改並且需要更多內存。 –

回答

0

db4o activation機制允許您控制將哪個對象加載到內存中。對於複雜的對象圖,您可能需要我們transparent activation,其中db4o在使用該對象時立即將對象加載到內存中。 但是db4o沒有顯式地從內存中刪除對象。它只是對所有加載的對象保留一個弱引用。如果一個對象是可到達的,它將停留在那裏(就像任何其他對象一樣)。或者,您可以明確禁用對象。

我只是想給db4o的可伸縮性添加一些註釋。 db4o是爲嵌入應用程序和設備而構建的。它從未爲大數據集構建。因此它有其侷限性。

  • 它是內部單線程的。大多數db4o操作會阻止所有其他db4o操作。
  • 它只能處理相對較小的數據庫。默認情況下,數據庫只能是2GB。您可以increase it up to 127 GB。不過我認爲db4o在2-16 GB的範圍內運行良好。之後數據庫可能會很大。無論如何,數以億計的2K對象是大數據庫的途徑。 (100Mio 2K的obj => 200GB)

因此,你可能需要看大的對象數據庫,像VOD。或者像Neo4J這樣的圖形數據庫對您的問題也是一個很好的選擇?