Ich habe eine SQLite-Datenbank (ca. 11 GB), die mehrere Tabellen einschließlich der Tabellen distance
und vertices
hat. Der Tisch distance
ist ziemlich groß (120 Millionen Reihen), vertices
ist kleiner (15 000 Reihen). Ich möchte sqlite3 in Python verwenden, um eine Spalte von distance
um Werte einer anderen Spalte in vertices
zu aktualisieren. Die Tabellenscheitelpunkte haben einen Index für die Spalte cat
und einen weiteren Index für orig_cat
.Update große SQLite-Datenbank in Stücke
Was ich tue:
import sqlite3
db_path='path/to/db.db'
conn = sqlite3.connect(db_path)
cur = conn.cursor()
cur.execute('''UPDATE distance SET
from_orig_v = (SELECT orig_cat FROM vertices WHERE cat=distance.source)''')
jedoch, dass die Update-Anweisung auf eine so große Datenbank ausgeführt wird, führt zu einem Speicherfehler. Die Speicherbelegung steigt stetig bis zum Absturz. Ich bin auf der Suche nach Ratschlägen, eine so große Update-Anweisung auszuführen, ohne den Arbeitsspeicher zu verlieren? Vielleicht Verarbeitung der Aktualisierung in Chunks (d. H. Zeilen von distance
Tabelle) und nach z. 1000 Updates für freien Speicher? Wie wäre das mit Python/SQLite?
Ich denke über die Verwendung dieser als eine Lösung für ein ähnliches Problem. Haben Sie irgendwelche Ideen, warum SQLite3 beim Update einer großen Datenbank abstürzt? –