Gibt es in Python eine B-Tree-Datenbank oder ein Framework?
Ich habe gehört, dass B-Struktur-Datenbanken sind schneller als Hash-Tabellen, so dass ich dachte, der Verwendung eines B-Baum-Datenbank für mein Projekt. Ist es bestehende framework in python, die es uns erlaubt, diese Daten-Struktur oder soll ich den code von Grund auf neu?
InformationsquelleAutor der Frage Rahul | 2010-10-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der einzige Grund, wählen Sie einen B-Baum hash-Tabelle, entweder im Speicher oder mit block-storage (wie in einer Datenbank), um die support-Anfragen andere als gleich. Ein b-Baum der Ihnen ermöglicht, Bereichs-Abfragen mit einer guten Leistung. Viele key-value stores (wie berkley db) nicht machen diese äußerlich sichtbaren, aber da Sie immer noch die hash-Schlüssel, aber das kann man noch gut Durchlaufen den gesamten Datenbestand schnell und stabil (Iteratoren bleiben gültig, auch wenn es hinzufügt oder löscht, oder muss der Baum ausbalanciert werden).
Wenn Sie nicht brauchen, Bereichsabfragen, und Sie brauchen nicht gleichzeitigen iteration, dann brauchen Sie nicht, b-Bäume, verwenden Sie eine hash-Tabelle, wird es schneller sein, bei einem beliebigen Maßstab.
Edit: ich habe Gelegenheit gehabt, für die oben genannten, um tatsächlich wahr zu sein; für diese, die
blist
Paket scheint zu sein, die vollständige Implementierung einer sortierten container-Bibliothek.InformationsquelleAutor der Antwort SingleNegationElimination
Programm, was Sie zu tun versuchen zuerst, dann optimieren, wenn nötig. Zeitraum.
EDIT:
http://pypi.python.org/pypi/blist
Drop-in-Ersatz für python-built-in-Liste.
InformationsquelleAutor der Antwort user318904
sollten Sie wirklich check out zodb.
http://www.zodb.org/en/latest/
machte ich eine Monographie über die es lange gehen, obwohl seine in Spanisch http://sourceforge.net/projects/banta/files/Labs/zodb/Monografia%20-%20ZODB.pdf/download
Informationen in Englisch ist ganz über dem Platz.
InformationsquelleAutor der Antwort Nande
SQLite3 verwendet B+ - Bäumen intern, aber es klingt wie Sie wollen, kann ein Schlüssel-Wert-Speicher. Versuchen Berkeley DB. Wenn Sie nicht brauchen, Transaktionen, versuchen im HDF5. Wenn Sie möchten, eine verteilte key-value-store, es gibt auch http://scalien.com/keyspace/aber das ist eine server-client-Typ-system, das die öffnung aller Arten von NoSQL key-value-stores.
Alle diese Systeme werden als O(log(n)) für einfügen und abrufen, so dass Sie wird wahrscheinlich langsamer sein als der hash-Tabellen, die Sie gerade verwenden.
Kyoto Cabinet " bietet ein hash-Baum, so dass möglicherweise mehr von dem, was Sie suchen, da es sein sollte O(1) für das einfügen und abrufen, aber Sie können nicht in-order-traversal, wenn Sie müssen, dass (obwohl da bist du derzeit mit hash-Bäumen, sollte das kein Problem sein).
http://fallabs.com/kyotocabinet/
Wenn Sie für die Leistung, die Sie benötigen, um die Geschwindigkeit kritische Elemente implementiert, die in einer kompilierten Sprache und dann ein wrapper-API in Python.
InformationsquelleAutor der Antwort Eric Holmberg
Möchten Sie vielleicht einen Blick auf mxBeeBase die Teil der eGenix-mx-Base Distribution. Es beinhaltet eine schnelle " on-disk B+Baum Implementierung und bietet storage-Klassen, die es erlauben, Gebäude auf der Festplatte Wörterbücher oder Datenbanken in Python.
InformationsquelleAutor der Antwort Marc-Andre Lemburg
Hier es ist eine gute btree Reine python-Implementierung. Sie können es anpassen, wenn nötig.
InformationsquelleAutor der Antwort Carlo Pires