2016-11-18 7 views
1

MongoDBのドキュメントとブログでは、このようなトランザクション機能について説明しています。ドキュメントレベルのトランザクションで十分ですか? (mongodb)

MongoDBの書き込み操作は、埋め込み配列とサブドキュメントを自動的に更新する機能を含め、ドキュメントレベルでACIDに準拠しています。

今、私はこの "ドキュメントレベルのトランザクションサポート"が十分であると思いますか? 私はそれが旧式のRDBMSのトランザクションサポートと同じくらい良いことができますか?

私は考えていたことは、一般的な質問、「これで十分ですか?」という事実でした。開発者のために?か否か。

+0

可能な複製を(http://stackoverflow.com/questions/6635718/how-to-work-around - 取引の欠如 - mongodb) – Thilo

+0

@Thilo iveはこの質問を読んで、私が心に留めていたことは一般的な質問だったという事実は "これで十分ですか?"開発者のために?またはそうでないか – sergio4

+1

この場合、質問は「広すぎる」または「主に意見に基づいて」です。あらゆる種類の開発者とあらゆる種類のアプリケーションがあります。要するに答えは – Thilo

答えて

0

この質問に答えるには、NoSQLの世界でスキーマ設計を理解する必要があります。 RDBMSのようにスキーマ設計にアプローチすると、トランザクションだけでなく、非常に悪い時間を持つことになります。

文書を適切に設計する場合、ドキュメントレベルのACID準拠は、使用例の99%で十分です。 99%以外でユースケースの1%であれば、トランザクションのためにデータベースに頼るべきではないと私は主張しています。これは、2つの完全に別々のものを並行して変更するという、実際には複雑なケースになります。これをやっていたとしても、RDBMSでさえ、常にコードで検証を書くでしょう。

銀行顧客の名前の変更とアドレス変更の同時進行を伴う銀行顧客向けの一括更新の例があります。 RDBMSでは、これらは別の表である可能性があります。 MongoDBでは、これらはどちらも同じ文書にあります。だからこれは99%に収まる。

1つの口座への口座引き落としと別の口座への口座引き出しは、1%に適合する例になります。これをSQLのトランザクションでラップすることはできますが、後で書き込みを検証するコードを記述しなければ、あなたは仕事を失うことになります。あなたは決してデータベースに頼ることはありません。 MongoDBと同じですが、これは2つの異なる文書です。

3

私はこれについてJoshuaに同意し、私の2セントを追加します。 RDBMSの世界では、トランザクションは複数の正規化されたデータ保持構造を頻繁に更新しています。変更が単位としてすべての構造にコミットされることを確実にするため、またはユニットとしてロールバックされることを確実にするためには、堅牢な原子レベルが必要です。 MongoDBでは理想的には論理的に属しているデータを同じ文書にまとめて保管するようにスキーマを設計することになります。これにより、ドキュメントレベルのアトミック性が、標準のドキュメントスキーマに完全に十分になります。

また、RDBMSトランザクション処理もMongoDBトランザクション処理も、エラーとデータ破損に対する唯一の防御線ではないことに同意します。アトミックでなければならない重要なデータの変更については、更新後のコードレベルで常に一貫性をチェックする必要があります。

ほとんどのRDBMSシステムでは、トランザクションの処理が常に1対1で並行性に対応するとは限りません。多くの場合、大きなトランザクションは1つまたは複数のテーブル全体をロックし、それに応答してバックログを発生させる可能性があります。 MongoDBでは、トランザクション処理におけるドキュメントレベルのACID準拠と、WiredTigerストレージエンジンを使用する人が利用できるドキュメントレベルの並行性との組み合わせが優れています。両方を考慮して設計されている場合、アプリケーションはドキュメントレベルで非常に並行して完全にACIDに準拠することができ、トランザクションワークロードに対する高いパフォーマンスとスループットを実現します。

乾杯、

ビル・フィンチ

0

ドキュメントレベルのトランザクションは良いですが、実際のアプリケーションには十分ではありません。一般的に、RDBMS世界とは少し違った考え方で、サブ文書を使用しなければならず、コレクション全体のトランザクションを使わなくても多くの状況を解決することができますが、幅広い取引 アカウントシステムの借方/貸方状況が一例です。または、2人のプレーヤーが互いに戦い、勝者が他のプレーヤーから「リソース」を得ているバトルゲームを実装すると、 ...両方のプレーヤーのリソース状態を並行して更新するか、何かが失敗した場合は両方をロールバックする必要があります。これはRDBMシステムのようにMongoDBトランザクションでは処理されません。他の人がすでに言ったように

もう一度、:あなたは、オブジェクト/文書構造に考える必要が、そこには多くのドキュメントレベル-取引が十分にある状況で、...

しかし集・を扱うことができます広範なトランザクションはMongoDBのロードマップにあります;-)

0

すべての論理データを1つのドキュメントに含めることができれば、MongoDBはリレーショナルデータベースより高速で高性能になります。すべてのデータを同時に書き込むかどうかを確認する必要があります(ACIDは文書レベルで対応しています)。

あなたが急いでいないのであれば、MongoDBはコレクション間でトランザクションを取得しようと努力しています!

よろしく、 フアン

0

バージョン4.0のMongoDBから始まっは、マルチドキュメントトランザクションのサポートが追加されます。したがって、MongoDBにはACID保証付きのドキュメントモデルの能力があります。詳細について

は、このリンクを参照してください:[?MongoDBの中の取引の不足を回避する方法]のhttps://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb?jmp=community

関連する問題