J'utilise ZODB pour stocker des données qui existent dans la mémoire pour des raisons de persistance. Si le service avec les données en mémoire se bloque à chaque fois, le redémarrage chargera les données de ZODB plutôt que d'interroger des centaines de milliers de lignes dans une base de données MySQL.Python: taille de fichier ZODB en croissance - pas de mise à jour?
Il semble que chaque fois que j'économise, disons 500K de données à mon fichier de base de données, mon fichier .fs se développe de 500K, plutôt que de rester à 500K. A titre d'exemple:
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()
Je veux écraser en continu les données dans la racine [ « data_db »] avec la valeur actuelle de MyDictionary. Quand j'imprime len (root ['data_db']), il imprime toujours le bon nombre d'éléments de mydictionary, mais chaque fois que ce code s'exécute (avec les mêmes données exactes) la taille du fichier augmente de 500K.
Est-ce que je fais quelque chose de mal ici?
Existe-t-il un autre système de stockage (peut-être natif de python) que vous pourriez recommander puisque tout ce que je veux faire est d'écraser les données stockées à chaque fois? Pickly fonctionnerait pour moi, mais les transactions semblent lentes quand j'ai un énorme ensemble de données (1M + entrées dans le dictionnaire) – sberry
Comme Mark a dit, je considérerais sqlite. –