Page 1 of 1

Wann soll Daten in ZODB festgelegt werden

Posted: 07 Feb 2025, 13:38
by Guest
Ich versuche, die durch das folgenden Code generierten Daten zu handeln: < /p>

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 ])
< /code>

Da das Wörterbuch groß ist (10000 Tasten x 10000 Liste mit jeweils 3 Elementen), ist es schwierig, es im Speicher zu halten. Ich suchte nach einer Lösung, die den Schlüssel speichert: Wert (in Form von Liste), sobald sie generiert werden. Es wurde hier empfohlen, ein Wörterbuch in einem bestimmten Format (Python) zu schreiben und zu lesen, um ZODB in Kombination mit BTree zu verwenden. < /p>

Bauern Sie mit mir, wenn dies zu naiv ist, meine Frage lautet: Wann sollte eine Transaktion aufrufen. Wenn ich es am Ende der inneren Schleife nenne, ist die resultierende Datei extrem groß (nicht sicher warum). Hier ist ein Ausschnitt: < /p>

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

Was ist, wenn ich es außerhalb der Schleifen nenne? So etwas wie: < /p>

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

Werden alle Daten im Speicher gehalten, bis ich transaktion aufrufe.Commit () < /strong>? Ich bin mir wieder nicht sicher, warum, aber dies führt zu einer kleineren Dateigröße auf der Festplatte. < /p>

Ich möchte die im Speicher gehaltenen Daten minimieren. Jede Anleitung würde geschätzt!