2012-06-05 10 views
9

Ich habe ein großes Python-Wörterbuch von Vektoren (150k Vektoren, 10k Dimensionen jeder) von Float-Nummern, die nicht in den Speicher geladen werden können, so muss ich eines der verwenden die zwei Methoden, um dies auf der Festplatte zu speichern und spezifische Vektoren gegebenenfalls abzurufen. Die Vektoren werden einmal erstellt und gespeichert, können aber viele (tausend) Mal gelesen werden - daher ist es wirklich wichtig, effizient zu lesen. Nach einigen Tests mit dem Modul shelve tendiere ich dazu zu glauben, dass sqlite eine bessere Option für diese Art von Aufgabe sein wird, aber bevor ich mit dem Schreiben von Code beginne, würde ich gerne mehr Meinungen dazu hören ... Zum Beispiel, gibt es noch andere Optionen außer den beiden, denen ich nicht bewusst bin?Auswahl zwischen Shelve und SQLite für wirklich großes Wörterbuch (Python)

Wenn wir nun zustimmen, dass die beste Option sqlite ist, bezieht sich eine andere Frage auf die genaue Form der Tabelle. Ich denke daran, eine feinkörnige Struktur mit Zeilen der Form vector_key, element_no, value zu verwenden, um eine effiziente Paginierung zu unterstützen, anstatt alle 10k Elemente eines Vektors in demselben Datensatz zu speichern. Ich würde mich über Vorschläge zu diesem Thema sehr freuen.

Antwort

9

Sie wollen sqlite3, dann, wenn Sie eine ORM wie sqlalchemy verwenden, dann können Sie leicht erweitern und andere Back-End-Datenbanken verwenden.

Regal ist eher ein "Spielzeug" als tatsächlich in Produktionscode nützlich.

Der andere Punkt, über den Sie sprechen, heißt Normalisierung und ich persönlich war nie sehr gut darin this sollte es für Sie erklären.

Nur als Extranote this zeigt Leistung Ausfälle in shelve vs sqlite3

+0

Hallo, ich habe vor dem Link, den Sie vorschlagen, das Problem ist, dass es testet nur schriftlich - nicht lesen, was meine höchste Sorge ist. Was die Normalisierung anbelangt, so sind beide Formen, die ich oben vorgeschlagen habe, bereits in normaler Form. Ich frage mich nur, welche von beiden am effizientesten zum Lesen sein wird - ich denke, ich kann einige Tests durchführen. Auf jeden Fall danke für die Antwort :) – dkar

3

Wie Sie mit numerischen Vektoren zu tun haben, können Sie PyTables eine interessante Alternative zu finden.

+0

Hallo, es scheint in der Tat als eine interessante Alternative, ich werde es mir besser ansehen. Danke für den Vorschlag :) – dkar

Verwandte Themen