これはMongoDBの回答です。
ここでのあなたの論理が何であるかはよくわかりません。副次索引の更新は、複数の更新などの複数ステートメントのトランザクションをロールバックできることとは関係ありません。
MongoDB には単一のドキュメントごとにトランザクションがあり、それがインデックスの更新に重要です。これらの操作は、必要に応じてジャーナルを使用して元に戻すことができます。
これは、同じトランザクション内で発生する必要があります。
はい、RDBMS とほぼ同じです。適用するインデックスが多いほど、書き込みが遅くなります。その理由はわかっているようです。
書き込みが発生すると、MongoDB はそのコレクションに適用されるすべてのインデックスを、特定のインデックスに適用されるフィールドで更新します。
さらに、インデックスがデータとは異なるホストに存在する可能性がある場合
MongoDB がそれを許可しているかどうかはわかりませんが、そのための JIRA があると思います。ただし、現在そのJIRAは見つかりません。
その場合、そのような更新がアトミックに機能するには、分散ロックが存在するか、2 フェーズ コミットが必要です。
最も可能性が高い。この機能を許可すると...まあ、毛玉を作成するとしましょう。
分割されたセットアップでも、各範囲のインデックスは構成サーバーではなく、分割自体に存在します。
ただし、これらのデータベースがマルチオブジェクト トランザクションをサポートしていない場合 (つまり、複数のホストにまたがるデータに対して 2 フェーズ コミットを実行しないことを意味します)。
これは、2 フェーズ コミットが意味するものではありません。2 フェーズ コミットとは何かを理解する必要があると思います: http://docs.mongodb.org/manual/tutorial/perform-two-phase-commits/
複数のシャードを対象とするトランザクションについて話しているのであれば、うーん、わかりました。
データから分離された B ツリー構造に存在するセカンダリ インデックスが古くないことを保証するために、彼らはどのような方法を使用しますか?
複数のドキュメント トランザクションがインデックスが古くなるかどうかに影響を与える理由はわかりません。ドキュメント間でグループ化することはできません。例外は一意のインデックスですが、単一のドキュメントの更新でも機能します。その一意性は、分割されたセットアップではやや複雑になり、保証できないことに注意してください.
作成しているインデックスでは、通常、ドキュメントのプレフィックス キーごとに 1 つのエントリです。ドキュメントのマルチキー インデックスでない限り、複数のインデックスを作成できます。ただし、どちらの方法でも、インデックスの更新はマルチ ドキュメントではなく、単一のオブジェクトごとに行われます。これが私が出した答えです。