質問hereを投稿した後、トランザクションとスケーラビリティのサポートの間でトレードオフを行うため、NoSQLのスケーリングアウトが優れていることを知りました。どのような状況で取引のサポートはそれほど重要ではありませんか?
私はトランザクションがそれほど重要ではないので、スケーラビリティがトランザクションのサポートよりも好ましいと思いますか?
質問hereを投稿した後、トランザクションとスケーラビリティのサポートの間でトレードオフを行うため、NoSQLのスケーリングアウトが優れていることを知りました。どのような状況で取引のサポートはそれほど重要ではありませんか?
私はトランザクションがそれほど重要ではないので、スケーラビリティがトランザクションのサポートよりも好ましいと思いますか?
まず、NoSQLがスケーラビリティに優れているということは、いくつかの状況がありますが、すべてではありません。
完全なACIDトランザクションは、アトミック、一貫性、隔離され、耐久性があります。トランザクションを失うと、データストア内のACIDの一部またはすべてが失われます。
メッセージキューなどの他の非同期システムでこれらの機能を復元するには、それ自体が耐久性のある多くの方法があります。耐久性のあるメッセージキューにデータを格納し、データをポップしてNoSQLで処理して、必要最小限に格納されていることを確認できたら、そのメッセージを消費済みとしてフラグを立てることができます。それはACIDのDですが、分散型と非同期型です。他のものを保証する方法はありますが、しばしばある程度は犠牲にされるか、システムの別の場所に移動されます。いくつかのNoSQLソリューションでは、アプリケーションに一貫性を持たせるだけで、無効なデータを格納しようとする必要はありません。
データベース駆動型トランザクションから離れる場合は、アプリケーションのテストを大幅に増やして、システムが失敗しないようにする必要があります(一部の失敗の場合)。
読み取りと書き込みの両方の要件を持つシステムでトランザクションと制約が重要でない状況は本質的にありません。彼らがあなたのデータを気にすることはないでしょう(そして、後でそれを後悔する人もいます。しかし、 "気遣う"レベルがあります。それは、あなたがACIDまたは「十分に良い」擬似ACIDで終わる方法の問題です。 RDMBSは、あなたのデータを安価に扱います。 NoSQLは貴重なデータを気にする必要がありませんが、スケーリングが安くなります(場合によって)。 RDBMSには数テラバイトのデータベースを持つ企業が数多く存在しているため、一方的には「規模が拡大していない」ということは不正確です。しかし、マルチテラバイトのSQLデータベースは、ユースケースに応じて多額の費用がかかる可能性があります(数台の3TBドライブを搭載したRAID 10アレイをコンピュータに置き、データベースエンジンをスローすることができます)。大きなテーブルで何らかのテーブルスキャンを実行するのに数時間かかりますが、索引付けされたルックアップもありますが、気にしなければ安価でマルチテラバイトです)。
最も大きなカテゴリは読み取り専用のクエリで、中止または失敗したトランザクションを単純に繰り返すことができます。基礎となる状態を変更している場合や、アクティビティの1回のみを保証したい場合は、適切なトランザクションセマンティクスが必要です。
「私はウィジェットを1つ注文したい、クレジットカードを請求したい」という適切な取引が必要です:ウィジェットが注文されていなければ、カードが充電されていない限り。 "注文xyzの出荷状況を報告する"はトランザクションである必要はありません。回答が得られない場合は、再読み込みを行うことができます。
それはしくじっまたは読み取り専用のクエリで問題となっている取引を中止されていません。この問題は、単一のトランザクションで複数の情報を読み取る必要があるときに発生し、その間にデータを変更するトランザクションがあります。あなたはAと言われている1つの場所からデータを読み上げることになりますが、次の読み込みはBで終わり、競合する情報をアプリケーションに返します。この状況は、スナップショットの分離を使用することが苦痛であり、コミットされた読み取りが長時間実行されているトランザクションでロックの問題を引き起こす可能性があるため、SQL Serverを避ける理由です。 – PlexQ
多くのことは、ちょっとした横向きの考えです。 全体の転記ポイントはいくつかの操作をまとめたもので、成功したものはすべてロールバックされ、トランザクションが進行中はレコードがロックされています。コミットされていないものを読まない限り、トランザクションがコミットされるまでの状態の個々の変更について
分散システムですべてのことを行うには、他のすべてについて「知っている」必要がある「集中的」でスケールが困難な点が必要なため、高価です。
ので、代わりにまたは注文これ、私のカードを充電し、私に私の現在の残高を示しています。
それはINSTOCK担当私のカードだし、私のカードが充電さならば、現在知られているバランスがこれをされます場合は、これを注文してみます。 リスクは順序が置かれること、あります、支払いを入れて、あなたがそれに対処する必要があるので、失敗します。提案されたカードの残高が完全に正確ではないリスクがあります。そのため、イタチの言葉を追加し、その結果とは対照的に、支払いの潜在的な影響を示します。それはそんなに重要な取引されているではありません
彼らが同様に/どのように私はそれらを使用しないで逃げることができNoSQLのシステムでサポートされていないとして、それは見ています。
まあRavendDBがサポート[取引]を行います(http://ravendb.net/faq/working-with-dtc) – oleksii