2011-01-12 51 views
1

我正在尋找將BDB的Java版本4.1.7的數據庫類型從BTree更改爲哈希。核心版本有DatabaseType.HASH,DatabaseType.RECNO和DatabaseType.Queue-這些在Java版本中不受支持。如果是的話,是否有理由放棄這些?無法更改Java版中的Berkeley DB數據庫類型?

回答

10

Berkeley DB產品管理總監David Segleau在這裏。一般來說,我們建議人們提問Berkeley DB forums。您會在那裏找到一個活躍的Berkeley DB應用程序開發人員的大型社區。

是的,Berkeley DB(C中的原始產品)具有B-樹,散列,隊列和Recno訪問方法。 Berkeley DB Java版僅支持B-Tree。其主要原因是我們約99%的用戶使用B-Tree進行存儲,而Hash僅由一小部分應用程序使用。

圍繞這個話題的一些有用的技術小竅門:

  1. 哈希是誰擁有龐大的數據集和可用內存高速緩存的極少量的人尤其有用。在這種特殊情況下,B-Tree可能需要多個I/O才能獲取內部索引頁(不適合緩存),然後獲取記錄。散列通常可以通過單個I/O訪問數據記錄。
  2. 如果您想順序訪問您的數據或允許重複項,哈希通常是沒有用的,因爲在哈希索引中沒有隱含順序。
  3. 大多數應用程序都有足夠的可用內存緩存來保存B樹的內部節點以及最常訪問的數據記錄。在這種更常見的情況下,B樹和哈希將具有幾乎相同的性能。
  4. 在過去的一年中,Berkeley DB Java版團隊一直與客戶和應用程序開發人員密切合作,使用非常大的數據集(在250GB - 低TB範圍內)。特別是,他們一直專注於如何最大限度地提高緩存效率,改進緩存驅逐算法並最大限度地減少Java垃圾收集的影響。我們發現BDB JE 4.1在緩存管理和效率方面表現要好得多,特別是對於超過可用緩存的數據集。有關此更改的更多信息,請參閱Berkeley DB下載頁面上的BDB JE 4.1.7更新日誌。
  5. 有關Berkeley DB中哈希與B-Tree訪問方法的更多信息,請參閱BDB參考手冊(選擇訪問方法)的第2章。

我希望這有幫助。

問候,

戴夫

+0

戴夫,怎麼樣recno? – bmargulies 2011-03-28 14:46:46

+0

Recno只是一個帶有數字鍵值的btree。 Recno具有邏輯記錄編號鍵行爲的某些特定屬性。有關更多信息,請參閱參考指南:http://bit.ly/f7Kh2P。正如我所提到的,大多數人使用B樹。如果您對使用Recno,Hash或Queue感興趣,最好的選擇是通過Java API使用Berkeley DB產品。 – dsegleau 2011-04-05 03:22:09

0

我也想了解同樣的事情。我也很喜歡在(1)場景中使用Hash的可能性,因此在內存大小和數據集大小之間有一個特定的比例。

有沒有這方面的選擇?你打算在未來把它放回去嗎? bergley db je在oracle.com上的站點說,訪問時間是獨立於數據集大小的常數。如果你使用BTrees,這種說法是錯誤的。