29

.NET で MongoDB と NoRM をいじっています。

私を混乱させたのは、トランザクションがありませ
ん(単に言うことはできませんMongoConnection.Begin/EndTransactionか、そのようなことです)。

何かが失敗した場合に備えて、作業単位パターンとロールバックの変更を使用したいと考えています。

ITransaction を使用してリポジトリを充実させるクリーンな方法はまだありますか?

4

8 に答える 8

29

MongoDB は、複雑なマルチドキュメント トランザクションをサポートしていません。それが絶対に必要なものである場合、それはおそらくあなたにぴったりではありません。

ただし、ほとんどの場合、複雑なトランザクションは必須ではありません。MongoDB のすべての操作は 1 つのドキュメントに対してアトミックであり、トランザクションを必要とする多くの操作を簡単に (そして高速に) 実装できるようにするナイスな更新修飾子をサポートしています。

于 2010-04-16T20:15:47.553 に答える
20

これは、MongoDBがすぐに使用できるトランザクションをサポートしていないことは事実ですが、楽観的なトランザクションを独自に実装することもできます。それらは作業単位にうまく適合します。C#で簡単に繰り返すことができるように、 GitHubでJavaの例といくつかの説明を書きました。

于 2012-10-06T07:30:23.193 に答える
0

代わりに MongoDb TokuMX を使用できます。

http://www.tokutek.com/products/tokumx-for-mongodb/

TokuMXTM は、MongoDB のオープン ソースの高性能ディストリビューションであり、基本的な MongoDB と比較してパフォーマンスと運用効率が大幅に向上しています。TokuMX は MongoDB のドロップイン代替品であり、パフォーマンスが 20 倍向上し、データベース サイズが 90% 削減され、MVCC による ACID トランザクションがサポートされます。

于 2014-05-14T02:00:16.377 に答える
0

はい、データベースのバージョンに応じて、MongoDB に Unit of Work パターンを適用する方法は複数あります。

MongoDB 4.0 までは、マルチドキュメント ACID トランザクションはサポートされていませんでした。その後、開発者は「2 フェーズ コミット プロトコル」(単一データベース) と「3 フェーズ コミット プロトコル」(分散データベースでのノンブロッキング) を使用して、データの一貫性を提供するオール オア ナッシングの実行ではない独自のトランザクション レイヤーを作成しました。データの整合性を維持します。そのため、パフォーマンスが低下しました。

MongoDB 4.0 では、マルチドキュメント ACID トランザクションのサポートが追加されました。

ソース:

https://en.wikipedia.org/wiki/Two-phase_commit_protocol

https://en.wikipedia.org/wiki/Three-phase_commit_protocol

https://www.mongodb.com/transactions

于 2018-09-05T07:46:55.007 に答える