運用ストレージにmongoDBを使用するETLアプリケーションを構築しています。ETLプロセスは、データソースから頻繁に増分ダンプを実行し、場合によっては完全なテーブルダンプを実行します。
フルダンプを実行するとき、mongoDBコレクション全体(インデックスとすべて)を置き換えたいと思います。
PHPチュートリアルでは、複数のドキュメントを挿入するためのこのアプローチを提案しています。
<?php
$connection = new MongoClient();
$collection = $connection->database->collectionName;
for ( $i = 0; $i < 100; $i++ )
{
$collection->insert( array( 'i' => $i, "field{$i}" => $i * 2 ) );
}
?>
ただし、数百万のドキュメントがある場合、これにより、mongoDBへの数百万の接続が発生します。これは、特にリモートDBでは明らかに大きなボトルネックになります。挿入が成功したことを確認するDBからのコールバックを待ちたいかどうかは言うまでもありません。
PHPドライバーでサポートされているmongoDBに、コレクション全体を大きな配列に置き換えて、DBへの単一の呼び出しを実行するメソッドはありますか?db.colleciton.drop()
vs.などのmongoDBの場合も高速になると思いますdb.collection.remove()
。
それが不可能な場合は、PHPスクリプトが実行されているのと同じサーバーにマスターDBを配置し、それをリモートで複製する方が効率的でしょうか。このようにして、ローカルDBからの応答が速くなり、レプリケーションから少し遅れることがありますが、それによってPHPスクリプトが以前に利用可能になると思います。
助言がありますか?
ありがとう、
gm