2016-10-24 8 views
0

私はdjangoモデルで約150〜200億エントリを節約しようとしています。私はpostgresqlを使用しています。私はdjango bulk_createを使用しようとしましたが、私のコンピュータは約45分間立ち往生していました。私の質問は、正しい方法でこれを行う方法ですか?django postgresqlに大量のデータを保存する(ほぼ200億エントリ)

+0

データのSQLダンプファイルはありますか?あなたのデータのソースは何ですか? –

+1

私はこれをチャンクで、それぞれ100万人と言うでしょう。バルクインサートはもちろんです。これはまだまだ時間がかかります。しかし、数字はpostgresqlを使うのは夢中に思えます。 –

+0

@TammoHeerenこれは、PostgreSQLのデータが単一テーブルのエントリである場合は大変です。 –

答えて

1

匿名のダンプ・ファイルに関する権利でありますデータをデータベースからロードする最善の方法です。

ダンプファイルを作成するためにデータベースにアクセスできない場合、ダンプファイルを作成するのが難しくなる可能性があります。そのため、Pythonで動作させる方法は、bulk_createバッチになります。例えば

:その後、再び

inserts = [] 
last = len(entries) 
batch_size = 10000 

for i, entry in enumerate(entries): ## or your datasource 
    # transform data to django object 
    inserts.append(EntryObject(attribute='attributes...')) 

    if i % batch_size == 0 or i == last: 

     EntryObject.bulk_create(inserts) # insert batch 

     inserts = [] # reset batch 

、それはあなたのデータソースに依存します。また、Djangoビューの一部として呼び出す必要がある場合は、それらを非同期タスクとして実行することもできます。

0

これは、システムのメモリが不足しているためです(RAM)。理想的な方法は、SQLダンプファイルを作成することです(別のDBから200億レコードを取得していると仮定します)。そして、このSQLファイルを新しいDBにロードします。ダンプファイルにあるすべてのデータはPostgreSQLにロードされます。ダンプファイルを作成するための

は、実行します。

$ pg_dump -U {user-name} {source_db} -f {dumpfilename.sql} 

ダンプファイルからの復元のために、実行します。

$ psql -U {user-name} -d {desintation_db}-f {dumpfilename.sql} 

チェック:How To Backup and Restore PostgreSQL Database Using pg_dump and psql詳細な情報については、

+0

メモリが不足しました。私のデータソースは、テキストファイルの読み込みです。だから私はバッチbulk_createをやった。私はこのすべてをRDSにアップロードするためにダンプが必要です。ありがとう。 – ThatBird

関連する問題