cuándo cometer datos en ZODB

Estoy tratando de manejar los datos generados por el siguiente fragmento de código:

for Gnodes in G.nodes()       # Gnodes iterates over 10000 values 
    Gvalue = someoperation(Gnodes)
    for Hnodes in H.nodes()   # Hnodes iterates over 10000 values 
        Hvalue =someoperation(Hnodes)
        score = SomeOperation on (Gvalue,Hvalue)
        dic_score.setdefault(Gnodes,[]).append([Hnodes, score, -1 ])

Como el diccionario es grande (10000 teclas x 10000 lista con 3 elementos cada una), es difícil mantenerlo en la memoria. Estaba buscando una solución que almacene el par clave: valor (en forma de lista) tan pronto como se generen. Fue aconsejado aquí,Escribir y leer un diccionario en un formato específico (Python), utilizar ZODB en combinación con Btree.

Tenga paciencia conmigo si esto es demasiado ingenuo, mi pregunta es, ¿cuándo debería uno llamar?transaction.commit() cometer los datos? Si lo llamo al final del bucle interno, el archivo resultante es extremadamente grande (no estoy seguro de por qué). Aquí hay un fragmento de código:

storage = FileStorage('Data.fs')
db = DB(store)
connection = db.open()
root = connection.root()
btree_container = IOBTree
root[0] = btree_container 
for nodes in G.nodes()
    btree_container[nodes] = PersistentList () ## I was loosing data prior to doing this 

for Gnodes in G.nodes()       # Gnodes iterates over 10000 values 
    Gvalue = someoperation(Gnodes)
    for Hnodes in H.nodes()   # Hnodes iterates over 10000 values 
        Hvalue =someoperation(Hnodes)
        score = SomeOperation on (Gvalue,Hvalue)
        btree_container.setdefault(Gnodes,[]).append([Hnodes, score, -1 ])
        transaction.commit()

¿Y si lo llamo fuera de los dos bucles? Algo como:

    ......
       ......
          score = SomeOperation on (Gvalue,Hvalue)
          btree_container.setdefault(Gnodes,[]).append([Hnodes, score, -1 ])
    transaction.commit()

¿Se guardarán todos los datos en la memoria hasta que llame a transaction.commit ()? De nuevo, no estoy seguro de por qué, pero esto da como resultado un tamaño de archivo más pequeño en el disco.

Quiero minimizar los datos que se guardan en la memoria. Cualquier orientación sería apreciada!

Respuestas a la pregunta(2)

Su respuesta a la pregunta