ユーザーが出品者からオブジェクトを購入できるウェブアプリを書くことを計画しています。また、自分で支払い手続きをする必要がないように、支払いを外部委託したいと思います。 MongoDBのようなNoSQLデータベースで次のシナリオがどのように機能するのか疑問に思っていましたか?
大手旅行会社がMongoDBを使用している例を見たので、そのようなシナリオは修正できるはずだと思いますが、どうすればよいかわかりません。 PostgreSQLのようなSQLデータベースを使用する必要がありますか?
まず、MongoDBに関する次のドキュメントを読むことをお勧めします。これは、このようなフォーラムに対する非常に広範な質問です。誰かがアプリケーションの要件を詳細に分析しない限り、正確な答えを出すことはできません。
広くMongoDBでは、ACIDプロパティは単一のドキュメントでは尊重され、マルチドキュメントでは尊重されません。
MongoDBはACIDトランザクションをサポートしていますか?
はい、しかし限られた意味で。 MongoDBは、ドキュメントレベルでACIDトランザクションをサポートしています。現在、MongoDBはマルチドキュメントトランザクションをサポートしていません。すべてではありませんが多くのアプリケーションでは、レコードのデータは単一のドキュメントとして管理される傾向があるため、これで十分です。ほとんどのデータベースと同様に、MongoDBはオンディスクジャーナルへの先行書き込みロギングを使用して、書き込み操作の耐久性を保証し、クラッシュの復元力を提供します。
MongoDBの分散された性質により、一貫性と可用性に関してACIDを超える追加の考慮が必要になります。 MongoDBは、レプリカセット、サーバー、ラック、およびデータセンターに分散されたデータの複数のコピーを高可用性のために自動的に維持します(MongoDBは高可用性をどのように保証しますか?を参照してください)。MongoDBは強い整合性があります。 。 (MongoDBはどのようにして整合性を確保しますか?を参照してください)。書き込み操作はすべてのレプリカセットメンバーに自動的に適用されます。プライマリ、複数のセットメンバー、過半数のセットメンバー、またはすべてのメンバーで成功した後に戻るように各書き込みを構成できます。読み取りは、プライマリメンバー、プライマリが利用できない場合はセカンダリメンバー、特定のメンバー(ワークロードの分離用)にのみ、またはping距離に基づいて最も近いセカンダリに適用できます。読み取りと書き込みを構成して、アプリケーションに必要な一貫性と可用性を実現できます。
同時実行についての詳細 ここ を読んでください。