Dies ist eine Aufgabe, für die ich ein Diktat hätte verwenden können, wenn ich nicht viel mehr Daten gespeichert hätte, als in meine 4 GB RAM passen. Ich mache auch andere speicherintensive Dinge im selben Programm. Je niedriger die Mem-Anforderungen, desto besser.

Ich möchte einfach

  1. Speichern Sie viele Zeichenfolgen

  2. Überprüfen Sie, ob eine Zeichenfolge in der Sammlung enthalten ist oder nicht

Gibt es eine Python-Methode, um dies zu tun? Ich benutze 3.3, also sind Berkelydbs raus.

Es muss auch genaue Antworten geben, also keine Bloom-Filter.

2
The Unfun Cat 8 Nov. 2012 im 22:00

4 Antworten

Beste Antwort

Wenn die Daten nicht in Ihren Speicher passen, haben Sie keine Wahl. Sie müssen einige dieser Daten vorübergehend in einem externen Speicher (Ihrer Festplatte) speichern. Wie Sie richtig erraten haben, ist der Dateizugriff teuer und langsam, daher müssen die Festplattenvorgänge auf ein Minimum beschränkt werden.

Da Sie anscheinend einen Schlüsselwertspeicher benötigen (wie Sie ein Diktat haben), ist es eine gute Idee, diesen so aufzuteilen, dass sich verwandte Daten an einer ähnlichen Stelle befinden, die Sie dann schnell lesen können -weise in den Speicher für Berechnungen.

Aber wie das geht, hängt ganz davon ab, was Sie tatsächlich tun. Ohne weitere Informationen können wir Ihnen dort nicht wirklich helfen.

Übrigens. Wie Sie bereits in Berkeley DB erwähnt haben, gibt es für Python 3.2 tatsächlich Bindungen, und das würde ich nicht tun überrascht, ob sie auch an Python 3.3 gearbeitet haben. Andernfalls ist 3.3 noch ziemlich neu, sodass möglicherweise ein Update kommt. Wenn Sie nach einer alternativen Schlüsselwertspeicherdatenbank suchen, probieren Sie möglicherweise redis aus. Ich habe die Python-Bindungen jedoch nicht ausprobiert.

2
poke 8 Nov. 2012 im 18:19

Nun, wenn Sie es nur speichern müssen, warum sollten Sie es im Speicher behalten, verwenden Sie eine Art Datenbank.

1
Iouri Goussev 8 Nov. 2012 im 18:06

Verwenden Sie sqlite3, um Ihren Anforderungen gerecht zu werden

Wenn Sie dringend eine schnelle Suche benötigen, können Sie den Marisa-Baum verwenden, siehe http://kmike.ru/python-data- Strukturen /, aber zuerst müssen Sie bestätigen, dass es sich um einen Engpass in Ihrer Anwendung handelt. Insbesondere der Cache kann mit der Festplattendatenbank wunderbare Dinge tun. Nicht zu früh optimieren. Profil.

2
Xavier Combelle 8 Nov. 2012 im 18:24

Verwenden Sie einfach das Standardmodul shelve, um ein zu erstellen beständiges Wörterbuch.

1
martineau 8 Nov. 2012 im 18:15