Mongo DBトランザクションを使用する必要があり、最近、トランザクションはMongoスタンドアロンモードでは機能せず、レプリカセットに対してのみ機能することがわかりました( C#を使用したMongo DB-トランザクションに関係なくドキュメントが追加される )。
また、スタンドアロンモードは本番環境には推奨されないことを読みました。
そのため、mongod.cfgでレプリカセット名を定義するだけで、Mongo DBをスタンドアロンではなくレプリカセットとして実行するのに十分であることがわかりました。
変更後、Mongoトランザクションが機能し始めました。
しかし、実際にはレプリケーション機能を使用していませんが、それをレプリカセットとして使用することは少し奇妙に感じられ、有効な構成を使用していることを確認したいと思います。
だから私の質問は:
レプリケーション、ロードバランシング、またはその他のスケーラブルな機能が本当に必要ない場合、Mongoを1ノードレプリカセットとして実行することに問題/欠点はありますか?
適切なレプリカセットによって提供される高可用性がありません。したがって、運用環境への展開にはお勧めできません。ただし、これは開発には問題ありません。
レプリカセットの機能は、主にスケーリングではなく高可用性に関するものであることに注意してください。
スタンドアロンとして実行する場合と1ノードレプリカセットとして実行する場合で、機能やパフォーマンスに違いはありますか?
単一ノードのレプリカセットにはoplogがあります。これは、oplogを格納するためにより多くのディスク容量を使用することを意味し、挿入/更新操作もoplogに書き込まれます(書き込み増幅)。
では、なぜスタンドアロンモードが推奨されないのですか?それは十分に安定していない、または他の理由ですか?
本番環境のMongoDBは、次の目的でレプリカセットの導入を考慮して設計されています。
つまり、MongoDBは、一般的なSQLモノリシックデータベース(垂直に拡張)ではなく、フォールトトレラントな分散データベース(水平に拡張)になるように設計されています。アイデアは、レプリカセットの1つのノードを失うと、他のノードがすぐに引き継ぐということです。ほとんどの場合、アプリケーションはデータベース側に障害があることさえ知りません。対照的に、モノリシックデータベースサーバーで障害が発生すると、すぐにアプリケーションが中断されます。
Kevinadiはよく答えたと思うが、それでも追加したい。
スタンドアロンは、単一のサーバーで実行されるmongodのインスタンスですが、レプリカセットの一部ではありません。テストと開発に使用されるスタンドアロンインスタンス。ただし、本番環境ではレプリカセットを使用することを常にお勧めします。
単一ノードのレプリカセットには、データセットに対するすべての変更を記録するoplogがあります。これは、oplogを格納するためにより多くのディスク容量を使用することを意味し、挿入/更新操作もoplogに書き込まれます(書き込み増幅)。また、ポイント・イン・タイム・リカバリーもサポートしています。
スタンドアロンデータベースをレプリカセットに変換する場合は、「スタンドアロンをレプリカセットに変換する」に従ってください。
トランザクションは、MongoDBバージョン4.0で導入されました。バージョン4.0以降、複数のドキュメントへの更新の原子性、または複数のドキュメントへの読み取り間の一貫性が必要な状況に対して、MongoDBはレプリカセットにマルチドキュメントトランザクションを提供します。トランザクションは、クラスター内で強い整合性を維持するためにoplogを必要とするため、スタンドアロンでは使用できません。