quando comprometer dados no ZODB

Eu estou tentando handel os dados gerados pelo seguinte trecho 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 o dicionário é grande (10000 teclas X 10000 lista com 3 elementos cada), é difícil mantê-lo na memória. Eu estava procurando uma solução que armazena a chave: valor (na forma de lista) par assim que eles são gerados. Foi aconselhado aqui,Escrevendo e lendo um dicionário em formato específico (Python), para usar o ZODB em combinação com o Btree.

Fique comigo se isso é muito ingênuo, minha pergunta é, quando se deve chamartransaction.commit() para confirmar os dados? Se eu chamá-lo no final do loop interno, o arquivo resultante é extremamente grande (não sei por que). Aqui está um trecho:

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()

E se eu chamar fora dos dois loops? Algo como:

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

Todos os dados serão mantidos na memória até eu chamar transaction.commit ()? Novamente, não sei por que, mas isso resulta em um tamanho de arquivo menor no disco.

Eu quero minimizar os dados que estão sendo mantidos na memória. Qualquer orientação seria apreciada!

questionAnswers(2)

yourAnswerToTheQuestion