.NET で MongoDB と NoRM をいじっています。
私を混乱させたのは、トランザクションがありませ
ん(単に言うことはできませんMongoConnection.Begin/EndTransaction
か、そのようなことです)。
何かが失敗した場合に備えて、作業単位パターンとロールバックの変更を使用したいと考えています。
ITransaction を使用してリポジトリを充実させるクリーンな方法はまだありますか?
.NET で MongoDB と NoRM をいじっています。
私を混乱させたのは、トランザクションがありませ
ん(単に言うことはできませんMongoConnection.Begin/EndTransaction
か、そのようなことです)。
何かが失敗した場合に備えて、作業単位パターンとロールバックの変更を使用したいと考えています。
ITransaction を使用してリポジトリを充実させるクリーンな方法はまだありますか?
MongoDB は、複雑なマルチドキュメント トランザクションをサポートしていません。それが絶対に必要なものである場合、それはおそらくあなたにぴったりではありません。
ただし、ほとんどの場合、複雑なトランザクションは必須ではありません。MongoDB のすべての操作は 1 つのドキュメントに対してアトミックであり、トランザクションを必要とする多くの操作を簡単に (そして高速に) 実装できるようにするナイスな更新修飾子をサポートしています。
これは、MongoDBがすぐに使用できるトランザクションをサポートしていないことは事実ですが、楽観的なトランザクションを独自に実装することもできます。それらは作業単位にうまく適合します。C#で簡単に繰り返すことができるように、 GitHubでJavaの例といくつかの説明を書きました。
代わりに MongoDb TokuMX を使用できます。
http://www.tokutek.com/products/tokumx-for-mongodb/
TokuMXTM は、MongoDB のオープン ソースの高性能ディストリビューションであり、基本的な MongoDB と比較してパフォーマンスと運用効率が大幅に向上しています。TokuMX は MongoDB のドロップイン代替品であり、パフォーマンスが 20 倍向上し、データベース サイズが 90% 削減され、MVCC による ACID トランザクションがサポートされます。
はい、データベースのバージョンに応じて、MongoDB に Unit of Work パターンを適用する方法は複数あります。
MongoDB 4.0 までは、マルチドキュメント ACID トランザクションはサポートされていませんでした。その後、開発者は「2 フェーズ コミット プロトコル」(単一データベース) と「3 フェーズ コミット プロトコル」(分散データベースでのノンブロッキング) を使用して、データの一貫性を提供するがオール オア ナッシングの実行ではない独自のトランザクション レイヤーを作成しました。データの整合性を維持します。そのため、パフォーマンスが低下しました。
MongoDB 4.0 では、マルチドキュメント ACID トランザクションのサポートが追加されました。
ソース:
https://en.wikipedia.org/wiki/Two-phase_commit_protocol