1

私はソーシャルネットワークアプリを構築していますが、次のことを非常に心配しています.mongoDBで多くのユーザー(数百万人を想定)が同じドキュメントを同時に変更しようとするとどうなりますか. 不一致、無視されたクエリ、または予期しない動作はありますか?

実用的な例: 2 つのコレクション: 「投稿」と「いいね」の投稿にはフィールド id | があります。名前 | 情報 | numberOfLikes likes にはフィールド id | があります。投稿 | fromUser

数百万人のユーザーが投稿を気に入ったと仮定すると、いいねオブジェクトが「いいね」コレクションに表示され、ビジネス ロジックは投稿の numberOfLikes を自動的にインクリメントします。大量のユーザーがその投稿のいいね数を同時に変更しようとすると、競合が発生する可能性があるのではないかと考えました。

4

3 に答える 3

2

データベースには、この種の状況を防ぐためのメカニズムが用意されています。さまざまな論理構造を「ロック」できるため、トランザクション数に関係なく、データが損なわれていないことが保証されます。

以下を参照してください。

http://docs.mongodb.org/manual/faq/concurrency/

于 2015-07-27T10:39:31.917 に答える
0

MongoDB では、操作はドキュメント レベルでアトミックです。http://docs.mongodb.org/manual/core/data-modeling-introduction/#atomicity-of-write-operationsを参照してください。

于 2015-07-27T10:40:08.030 に答える
0

いくつかのこと。

あなたはソーシャルアプリを構築していて、何百万もの「いいね」と「トン」を同時に期待していると言っています. もちろん、プロジェクトの開始時にパフォーマンスとスケーリングを考慮するのは良いことですが、次の Facebook を今すぐ構築するつもりはありません。

さらに、このアプリのプライマリ データベースとして MongoDB を使用したいようで、リレーショナル データベースとして使用したいようです。やや偏ったタイトルの記事Why You Should Never Use MongoDBを読んでください。

サイトをリレーショナル データベースでバックアップし (これは、 「このユーザーが気に入った投稿は何か」「このユーザーは既にこの投稿を気に入ったか」などのクエリにも適している場合があります)、定期的にそれを MongoDB に非正規化することをお勧めします。

于 2015-07-27T10:54:44.433 に答える