私は特定のデータベースにデータをロードするプログラムを書いています。これは私がCOPY
コマンドの使用についてのthis質問について承知しています...私が今やっている何postgresの速度向上INSERTコマンド
conn = psycopg2.connect("dbname='%s' user='postgres' host='localhost'"%dbName)
cur = conn.cursor()
lRows = len(rows)
i, iN = 0, 1000
while True:
if iN >= lRows:
# write the last of the data, and break ...
iN = lRows
values = [dict(zip(header, r)) for r in rows[i:iN]]
cur.executemany(insertString, values)
conn.commit()
break
values = [dict(zip(header, r)) for r in rows[i:iN]]
cur.executemany(insertString, values)
conn.commit()
i += 1000
iN += 1000
cur.close()
conn.close()
です。しかし、ファイルをデータベースにアップロードする前に、私は自分のファイルにいくつかの簿記をする必要があります。したがって私はこの方法でPythonを使用しています。
私は物事を高速化する方法についての質問のカップルを持っている...
- はそれが最後で、多くの
cur.executemany()
文や単一conn.commit()
を行う方が良い(または可能)でしょうか?これは、cur.close()
の文の直前にという単一のconn.commit()
の文を挿入することを意味します。 - 私はいつも他の人が1000のようなレコードのバッチに対して
cur.executemany()
を使用するのを見てきました。これは一般的なケースであるか、ファイルから読み取ったレコード全体に対してcur.executemany()
を実行するだけですか?私は潜在的に何十万ものレコード、あるいはおそらく100万レコード以上のレコードを持っています。 (私はメモリにファイル全体を収めるのに十分なRAMを持っています)。一度にアップロードできるレコード数の上限を知るにはどうしたらいいですか? - 私は開いているファイルごとにデータベースに新しく接続しています。私はこれをやっています。なぜなら、このプロセスは完了まで何日もかかるためです。いつでも接続が失われても、データ全体を破壊する接続に関する問題はありません。何千ものファイルがあります。私たちが行っている数千のつながりは、そのプロセスに使われる時間の重要な部分になるでしょうか?
- 私がやってはならないプログラムでやっていることは、プロセスの合計時間を短縮することができますか?
私が得ることができるどんな助けでもありがとう。質問がとても基本的であることは申し訳ありません。私はちょうどPythonのデータベースを使い始めていますが、何らかの理由で、私はこれらの質問のどれにも決定的な答えを得ていないようです。