我很難在我的SSD上存儲數十億個帶有散列陣列的16/32bytes的鍵/值對。京都內閣/伯克利DB:散列表大小限制
與京都內閣:當它工作正常,它插入在70000記錄/秒。一旦下降,它將下降到10-500記錄/秒。使用默認設置後,下降發生在大約一百萬條記錄之後。查看文檔,這是數組中的存儲區的默認數量,因此它是有道理的。我把這個數字增加到了25百萬,實際上,它可以正常工作,直到大約2500萬條記錄。問題是,只要我把桶的數量推到3千萬或以上,插入速率從一開始就下降到10-500記錄/秒。京都內閣的目的不是爲了增加數據庫創建後的存儲桶數量,所以我不能插入超過25萬條記錄。
1/一旦桶號超過25M,爲什麼KC的插入率會非常低?
與伯克利DB:我得到的最佳速度略低於KC,接近50000記錄/秒,但仍然可以。使用默認設置,就像KC一樣,速度在大約一百萬條記錄後突然下降。我知道BDB旨在逐步擴展桶的數量。無論如何,它試圖增加初始數量,使用HashNumElements和FillFactor,但是這些嘗試中的任何一個都使情況變得最糟糕。所以我仍然無法在DBD中插入1-2百萬條記錄。我嘗試激活非同步事務,嘗試不同的檢查點,增加緩存。沒有什麼改善了下拉。
2/什麼可能導致BDB插入率在1-2百萬次插入後下降?
注:我用java工作,當轉速下降時,CPU佔用率,而在正確的速度工作時,在100%降低到0-30%。
注意:停止進程並恢復插入不會改變任何內容。所以我不認爲這與內存限制或垃圾收集有關。
Thx。
你的BDB環境是什麼樣的?你在使用交易,複製等嗎?另外,你可以發佈一些示例代碼? –
目前的狀態是:[pastebin.com/bWJpbipZ](http://pastebin.com/bWJpbipZ)。我使用'database.put(transaction,k,v)'插入',使用'database.get(transaction,k,v,LockMode.DEFAULT)'讀取,每隔500000個插入使用'environment.checkpoint(null)'插入。 –