Mongo db 用の C# ドライバーを使用しており、上限付きコレクションのサイズ変更を実装したいと考えています。この回答のアドバイスに従いました。これは、一時的な名前で新しいコレクションを作成し、古いコレクションからドキュメントをコピーし、古いコレクションを削除して、新しいコレクションの名前を変更することを提案しています。しかし、どうすればこれを効率的に行うことができますか? 現在のコレクションのサイズは 700Mb で、すべてのデータをコピーするにはかなりの時間がかかります。サーバーが実行されているマシンでこのコードを実行する可能性があります
2 に答える
しかし、どうすればこれを効率的に行うことができますか?
あなたは本当にできません。その前の回答は、10gen ( MongoDB の背後にある会社)のサポート エンジニアとして働く Scott Hernandez からのものです。彼は地球上の誰と同じように MongoDB を知っているので、彼の答えがうまくいかない場合は、まったく別のものを考え出す必要があります。
全く違うものに…
コードで解決策を試してください。
新しい上限付きコレクションを作成し、コードを変更して、新しいコレクションに書き込みますが、新しいコレクションと古いコレクションの両方から読み取るようにします。少し遅くなります (書き込む前に両方のコレクションをチェックする必要があります)。ただし、最終的にはすべてのデータが新しいコレクションに含まれ、古いコレクションからの読み取りを停止できます。
キャップされたコレクションのサイズを変更する最も効率的な方法は、新しいコレクションを作成し、ドキュメントをコピーしてから、古いコレクションの名前を変更し、参照されている回答で説明されているように新しいコレクションの名前を変更することです。
注:切り替えるときに、誰も古いコレクションを挿入/更新していないことを確認してください。そのコードを db.eval("....") で実行すると、実行中にサーバーがロックされます。