テーブルdistance
とvertices
を含む複数のテーブルを持つsqliteデータベース(アプリケーション11 GB)があります。テーブルdistance
はかなり大きいです(120 mioの行)、vertices
は小さいです(15000行)。私はのある列をvertices
の別の列の値で更新するために、Pythonでsqlite3を使用したいと思います。テーブルの頂点には、列cat
のインデックスとorig_cat
の別のインデックスがあります。私がやっている何大規模なsqliteデータベースをチャンクで更新する
:
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)''')
をしかし、このような大規模なデータベースにその更新ステートメントを実行し、メモリエラーが発生します。クラッシュするまでメモリ使用量は着実に増加しています。メモリを使い果たしずにこのような大きな更新ステートメントを実行するようアドバイスしたいのですが?おそらく、チャンク(例えば、distance
の表の行)で更新を処理し、 1000メモリの空き更新?どのようにそれはPython/sqliteで行われるだろうか?
私はこれを同様の問題に対する解決策。大きなデータベースを更新する際にSQLite3がクラッシュする理由についてのアイデアはありますか? –