Ich verwende ZODB, um einige Daten zu speichern, die aus Gründen der Persistenz im Speicher vorhanden sind. Wenn der Dienst mit den Daten im Speicher alle abstürzt, werden beim Neustart die Daten von ZODB geladen, anstatt 100000 Zeilen in einer MySQL-Datenbank abzufragen.Python: ZODB Dateigröße wächst - nicht aktualisiert?
Es scheint, dass jedes Mal, wenn ich 500k Daten in meine Datenbankdatei speichern, meine .fs-Datei um 500K wächst, anstatt bei 500K zu bleiben. Als Beispiel:
storage = FileStorage.FileStorage(MY_PATH)
db = DB(storage)
connection = db.open()
root = connection.root()
if not root.has_key('data_db'):
root['data_db'] = OOBTree()
mydictionary = {'some dictionary with 500K of data'}
root['data_db'] = mydictionary
root._p_changed = 1
transaction.commit()
transaction.abort()
connection.close()
db.close()
storage.close()
Ich mag die Daten in root [ ‚data_DB‘] mit dem aktuellen Wert von MyDictionary kontinuierlich zu überschreiben. Wenn ich len (root ['data_db']) drucke, druckt es immer die richtige Anzahl von Elementen aus mydictionary, aber jedes Mal, wenn dieser Code ausgeführt wird (mit genau denselben Daten), wird die Dateigröße um die Datengröße erhöht, in diesem Fall 500K.
Mache ich hier etwas falsch?
Gibt es ein anderes Speichersystem (möglicherweise nativ zu Python), das Sie vielleicht empfehlen, da ich nur die gespeicherten Daten jedes Mal überschreiben möchte? Pickly würde für mich arbeiten, aber die Transaktionen scheinen langsam, wenn ich eine riesige Menge von Daten habe (1M + Einträge im Wörterbuch) – sberry
Wie Mark sagte, würde ich sqlite betrachten. –