Am Donnerstag, 22. September 2005 14:06 schrieb Gerhard Häring:
Diez B. Roggisch wrote:
Tjo, also irgendwie brauche ich da wohl eine Datenstruktur, die dann eben auf die Platte schreibt, sobald kein Hauptspeicher mehr da ist. Schön wäre natürlich, wenn nur selten vorkommende Strings auf Platte ausgelagert würden. Gibt es soetwas schon? Oder sollte man da Berkely DB oder etwas ähnliches verwenden?
Ja, sowas gibt: heisst datenbank :):) Ob berkleydb dabei gut genug ist - KA. [...]
Ich würde dafür SQLite nehmen. Die Dinger in eine Datenbanktabelle schreiben, dann mit einem SELECT DISTINCT zurücklesen:
Ja, so ähnlich werde ich es machen. Einfach Feld als uniq erklären und dann alles inserten. Dann sind die Einträge automatisch distinct.
... cur.execute("select distinct value from stringtable") for row in cur: ...
wobei das anschließende Iterieren über den Cursor die rows "on-demand" abholt, und nicht etwa alle auf einmal. Somit dürfte es da kein Speicherproblem geben.
Ja, ich mache das momentan so: def getAllRows(): con, cur = getDB("blubber") cur.execute("select * from blub") while True: rows = cur.fetchmany(1000) if not rows: break else: for row in rows: yield row Wobei man aufpassen muß, daß man dafür einen anderen Cursor verwendet, als für die anderen Datenbankzugriffe, die man macht, während über den Generator iteriert wird. Wenn man da den gleichen nimmt, kommt da natürlich plötzlich nichts mehr zurück, weil eine andere Query ja schon fertig ist :>. Gruss, Jochen _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de