永続化のために、メモリに存在するデータを格納するためにZODBを使用しています。メモリ内のデータを含むサービスがクラッシュするたびにクラッシュした場合、再起動すると、MySQLデータベースの数十万行をクエリするのではなく、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の現在の値で継続的に上書きしたい。len(root ['data_db'])を出力すると、常にmydictionaryから正しい数のアイテムが出力されますが、このコードが(同じ正確なデータで)実行されるたびに、ファイルサイズはデータサイズ(この場合は500K)だけ増加します。
私はここで何か間違ったことをしていますか?