アプリケーションをAppEngineデータストアからMongoDBバックエンドに移植している最中であり、「ドキュメントの更新」の一貫性について質問があります。1つのドキュメントの更新がすべてアトミックで分離されていることは理解していますが、異なるレプリカセット間で「一貫性がある」ことを保証する方法はありますか?
私たちのアプリケーションでは、多くのユーザーが1回の更新中にいくつかの埋め込みドキュメント(オブジェクト)を挿入することで、1つのドキュメントを同時に更新しようとする可能性があります。これらの更新がすべてのレプリカで論理的に一貫した方法で行われるようにする必要があります。つまり、1人のユーザーがいくつかの埋め込みドキュメントを親ドキュメントに「配置」すると、他のユーザーは、確実に完了するまで、埋め込みドキュメントを親ドキュメントに配置できなくなります。最初のユーザーの更新を読んで受け取りました。
つまり、一貫性とは、2人のユーザーが1つのドキュメントに対してまったく同時に更新を実行しようとした場合に、MongoDBがそれらの更新の一方のみを許可し、もう一方を破棄する(または少なくとも両方が発生するのを防ぎます)。ここでは、標準の「シャーディング」ソリューションを使用できません。これは、単一の更新が単なるインクリメントまたはデクリメント以上のもので構成されているためです。
1つの特定のドキュメントの一貫性を保証する最良の方法は何ですか?