Я пытаюсь передать данные, сгенерированные следующим фрагментом кода:
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 ])
Поскольку словарь большой (10000 ключей X 10000 список с 3 элементами каждый), его трудно сохранить в памяти. Я искал решение, в котором хранится пара ключей: значение (в виде списка), как только они будут сгенерированы. Здесь было рекомендовано Написание и чтение словаря в определенном формате (Python), чтобы использовать ZODB в сочетании с Btree.
Потерпите меня, если это слишком наивно, мой вопрос: когда нужно позвонить transaction.commit(), чтобы зафиксировать данные? Если я назову его в конце внутреннего цикла, результирующий файл будет чрезвычайно большим (не знаю, почему). Вот фрагмент:
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()
Что делать, если я вызываю это за пределами обоих циклов? Что-то вроде:
    ......
       ......
          score = SomeOperation on (Gvalue,Hvalue)
          btree_container.setdefault(Gnodes,[]).append([Hnodes, score, -1 ])
    transaction.commit()
Будут ли сохранены все данные в памяти до тех пор, пока я не вызову transaction.commit()? Опять же, я не уверен, почему, но это приводит к меньшему размеру файла на диске.
Я хочу свести к минимуму данные, хранящиеся в памяти. Любое руководство будет оценено!
