私は、永続性のためにメモリ内に存在するいくつかのデータを格納するZODBを使用しています。メモリ内のデータを持つサービスがクラッシュした場合、再起動すると、MySQLデータベース内の何千もの行を照会するのではなく、ZODBからデータがロードされます。Python:ZODBファイルサイズが大きくなっています - 更新していませんか?
データベースファイルに500Kのデータを保存するたびに、私の.fsファイルは500Kにとどまるのではなく、500Kずつ増加するようです。例として:
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()
root ['data_db']のデータをmydictionaryの現在の値で上書きし続けたいとします。私は(ルート[「data_dbを」])lenを印刷するときは、常にmydictionaryからのアイテムの正しい数を出力しますが、すべての時間は(正確に同じデータを持つ)。このコードの実行ファイルのサイズは、この場合の500Kには、データサイズによって増加しました。
ここで何か問題がありますか? ZODBのデータに変更が、それはファイルの末尾に追加されます
あなたは私がするたびに保存されたデータを上書きされてやりたいすべてのため、お勧めかもしれません(のpythonにおそらくネイティブ)他のストレージシステムはありますか?マークが言ったように私はsqliteのを検討する、 – sberry
をPicklyは私のために働くだろうが、私は(辞書の中1M +エントリー)データの巨大なセットを持っているとき、トランザクションが遅いようです。 –