この質問には2つの側面があり、どちらもインデックスに関連しています。
5億3000万のエントリを持つデータセットがあり、各エントリには10個の要素の配列があります。私は単一のmongodを使用しています。配列post-bulk-insertにインデックスを作成しています。配列には、文字列型の2つのキーと値のペア(int)があります。
構築前にインデックスを作成することがmongodbの設計対象であり、このような大規模なデータセットは、大量のram / swappable-virtual-memoryがないと(挿入後に)インデックスを作成できないことをすでに推測/調査しました。
1つ:インデックス構築のフェーズ
インデックス構築のフェーズは何ですか。ログを見て、0から100%に一度上昇し、100%に達したときにカウントを開始するのを確認しました(並べ替えと関係がありますか??)。2番目のフェーズは最初のフェーズよりもはるかに遅くなりました。実行する必要のあるパスは他にありますか?
2:インデックスの状態
私はこのレートでインデックスの構築を監視するつもりはなく、バックアップとしてインデックス付きのデータセットを持っています(これはもう信頼できません。読み続けてください)。だから、私kill -9'd
はプロセスです。プロセスを再開しました。ログには、インデックスビルド操作が進行中であり、正しく終了しなかったことをデータベースが確認していることが示されていますが、これ以上のことはありません。インデックスがdb.<db-name>.getIndexes()
リストに表示されます。
これは特に少し奇妙だと思いますgetIndexes
。この場合のインデックスの構築は決して終了しなかったという事実を知っています。そして今では、インデックス作成が正常に終了したと信じているバックアップを信頼できません。
少なくとも、データベースプラットフォームが一貫した状態にあるか、制御を通過する前にデータベースプラットフォームに到達することを期待しています。したがって、インデックス構築をロールバックするか、終了するか、リカバリー操作なしで開始することを拒否します。
では、データベースが一貫した状態にあるかどうか、具体的にはインデックスを確認するにはどうすればよいですか?