2011-01-12 4 views
1

Ich wollte den Database Type von Java Edition 4.1.7 von BDB von BTree zu Hash ändern. Die Core-Version hatte DatabaseType.HASH, DatabaseType.RECNO und DatabaseType.Queue. Werden diese in der Java Edition nicht unterstützt? Wenn ja, gibt es einen Grund, diese fallen zu lassen?Kann Berkeley DB Database in Java Edition nicht ändern?

Antwort

10

David Segleau, Direktor des Produktmanagements für Berkeley DB hier. Generell empfehlen wir, Fragen an die Berkeley DB forums zu stellen. Sie finden dort eine große Gemeinschaft aktiver Berkeley DB-Anwendungsentwickler.

Ja, Berkeley DB (das ursprüngliche Produkt in C) hat B-Tree, Hash, Queue und Recno Zugriffsmethoden. Berkeley DB Java Edition unterstützt nur B-Tree. Der Hauptgrund dafür ist, dass etwa 99% unserer Benutzer B-Tree für die Speicherung verwenden und Hash nur von einer kleinen Teilmenge von Anwendungen verwendet wird.

einige nützliche technische Leckerbissen, um dieses Thema:

  1. Hash ist besonders nützlich für Menschen, die eine große Datenmenge und eine sehr kleine Menge an verfügbarem Speicher-Cache haben. In diesem speziellen Szenario benötigt ein B-Tree möglicherweise mehrere I/Os, um die internen Indexseiten (die nicht in den Cache passen) abzurufen und dann den Datensatz abzurufen. Hash kann typischerweise mit einer einzigen E/A auf den Datensatz zugreifen.
  2. Hash ist normalerweise nicht hilfreich, wenn Sie sequenziell auf Ihre Daten zugreifen oder Duplikate zulassen möchten, da in einem Hash-Index keine implizite Sortierung enthalten ist.
  3. Die meisten Anwendungen verfügen über ausreichend verfügbaren Speichercache, um die internen Knoten eines B-Baums sowie die am häufigsten verwendeten Datensätze aufzunehmen. In diesem viel häufigeren Szenario werden B-Baum und Hash fast identische Leistung haben.
  4. Im letzten Jahr hat das Berkeley DB Java Edition-Team sehr eng mit Kunden und Anwendungsentwicklern zusammengearbeitet, die sehr große Datenmengen verwenden (im Bereich von 250 GB - niedriger TB). Insbesondere konzentrierten sie sich auf die Maximierung der Cache-Effizienz, die Verbesserung der Cache-Räumungsalgorithmen und die Minimierung der Auswirkungen der Java-Speicherbereinigung. Wir haben festgestellt, dass BDB JE 4.1 hinsichtlich Cache-Management und Effizienz deutlich besser abschneidet, insbesondere bei Datensätzen, die den verfügbaren Cache überschreiten. Weitere Informationen zu dieser Änderung finden Sie im BDB JE 4.1.7 Changelog auf der Berkeley DB-Downloadseite.
  5. Weitere Informationen zu Hash- und B-Tree-Zugriffsmethoden in Berkeley DB finden Sie in Kapitel 2 des BDB-Referenzhandbuchs (Auswählen einer Zugriffsmethode).

Ich hoffe, dass dies hilfreich war.

Grüße,

Dave

+0

Dave, was ist mit recno? – bmargulies

+0

Recno ist einfach ein btree mit einem numerischen Schlüsselwert. Recno hat bestimmte spezifische Eigenschaften in Bezug auf das Verhalten der nummerierten Schlüssel des logischen Datensatzes. Weitere Informationen finden Sie im Referenzhandbuch unter http://bit.ly/f7Kh2P. Wie ich bereits erwähnte, verwenden die meisten Leute B-Bäume.Wenn Sie Recno, Hash oder Queue verwenden möchten, verwenden Sie am besten das Berkeley DB-Produkt über die Java-API. – dsegleau

0

Ich versuchte auch, die gleiche Sache zu verstehen. Ich würde auch die Möglichkeit schätzen, Hash in berkeley db je zu verwenden, da ich im (1) -Szenario arbeite, also mit einem bestimmten Verhältnis zwischen Speichergröße und Datasetgröße.

Gibt es irgendwelche Optionen dazu? Planen Sie, dies in die Zukunft zurück zu legen? berkeley db je auf oracle.com sagt, dass die Zugriffszeit unabhängig von der Datenmenge konstant ist. Wenn Sie BTrees verwenden, ist diese Behauptung falsch.

+0

Wenn Sie Recno, Hash oder Queue verwenden möchten, verwenden Sie am besten das Berkeley DB-Produkt über die Java-API. Berkeley DB Java Edition hat noch nie die HASH-Zugriffsmethode unterstützt. Es ist nicht geplant, es zu diesem Zeitpunkt zu BDB JE hinzuzufügen. Ich entschuldige mich, wenn es einen Text auf der Website gibt, der irreführend ist. Offensichtlich hängt die Zugriffszeit von der Tiefe des B-Baums und der Anzahl der erforderlichen E/A ab. Wenn sich der Index und die Daten bereits im Speicher befinden, hat die Tiefe des B-Baums nur wenig messbare Auswirkungen. – dsegleau

+0

Diese anderen Produkt- und Leistungsfragen können auch in den Berkeley DB-Foren auf OTN gestellt werden. Das BDB Java Edition Forum finden Sie unter: http://bit.ly/e1AYFi. – dsegleau