これは何年も前の質問ですが...
つまり、予想されるあらゆる状況でデータの整合性/安全性を保証するものとしてACIDを理解できます。一般的なプログラミングの場合と同様に、すべての頭痛の種はマルチスレッドによるものです。
NoSQLの最大の問題は、主にACIです。D(urability)は通常、別の問題です。
DBがシングルスレッドの場合、つまり一度に1人のユーザーしかアクセスできない場合、これはネイティブにACIに準拠しています。しかし、事実上、これほど贅沢なサーバーはありません。
DBをマルチスレッド化する必要がある場合-複数のユーザー/クライアントに同時にサービスを提供する場合-ACI準拠のトランザクションが必要です。または、単純なデータ損失ではなく、サイレントデータ破損が発生します。これはもっと恐ろしいことです。簡単に言うと、これは一般的なマルチスレッドプログラミングとまったく同じです。ロックなどの適切なメカニズムがない場合、未定義のデータが取得されます。そして、DBのメカニズムは完全にACIDコンプライアンスと呼ばれていました。
多くのYesSQL / NoSQLデータベースは、それ自体がACIDに準拠していることをアドバタイズしますが、実際には、実際にそうしたものはほとんどありません。
ACIDコンプライアンスなし=マルチユーザー(クライアント)環境では常に未定義の結果が得られます。どんなDBをやっているのかはよくわかりません。
単一行/キーACID準拠=一度に単一の値のみを変更すると、保証された結果が得られます。しかし、複数の行/キーを同時に更新すると、未定義の結果(=サイレントデータ破損)になります。Cassandra、MongoDB、CouchDBなど、現在人気のあるNoSQL DBのほとんどは、これらの種類のDBは単一行トランザクションに対してのみ安全です。したがって、DBロジックがトランザクションの複数の行に触れないことを保証する必要があります。
複数行/キーのACIDコンプライアンス=すべての操作で常に保証された結果が得られます。これは、RDBMSとしての最小要件です。NoSQLフィールドでは、これを実行するものはほとんどありません。Spanner、MarkLogic、VoltDB、FoundationDB。他に解決策があるかどうかさえわかりません。これらの種類のDBは本当に新しくて新しいので、その能力や制限についてはほとんど何も知られていません。
とにかく、これはD(urability)以外の比較です。したがって、耐久性属性も確認することを忘れないでください。範囲が広くなりすぎて耐久性の比較が非常に難しい。私はこのトピックをよく知りません…
また、ACID準拠のDBでも違いがあります。
時々ACID準拠/設定が必要/自動的なものがない.... /一部のコンポーネントはACIDに準拠していない/非常に高速だが、これを無効にする必要がある... /特定のモジュールを使用する場合はACID準拠... = weデフォルトでは、データの安全性はバンドルされません。それは、アドオン、オプション、または別売りです。ダウンロード、アセンブル、セットアップ、適切なコマンドの発行を忘れないでください。とにかく、データの安全性は黙って無視されます。自分でやれ。自分で確認してください。間違えないように頑張ってください。この種のDBを安全に使用するには、チームの全員が完璧なDBAでなければなりません。MySQL。
常にACID準拠=データの安全性をパフォーマンスなどと交換することはありません。データの安全性は、このDBパッケージの強制バンドルです。ほとんどの商用RDBMS、PostgreSQL。
上記は典型的なDBの実装です。それでも、他のハードウェア障害によりデータベースが破損する可能性があります。メモリエラー、データチャネルエラー、その他の考えられるエラーなど。したがって、追加の冗長性が必要であり、実際の本番品質のDBはフォールトトレランス機能を提供する必要があります。
冗長性はありません。データが破損すると、すべてのデータが失われます。
バックアップ。スナップショットのコピー/復元を行います。最後のバックアップ後にデータを失います。
オンラインバックアップ。データベースの実行中にスナップショットバックアップを実行できます。
非同期レプリケーション。1秒ごと(または指定した期間)のバックアップ。マシンがダウンした場合、このDBはリブートするだけでデータを確実に戻すことができます。最後の1秒後にデータが失われます。
同期レプリケーション。データの更新ごとにすぐにバックアップします。あなたは常に元のデータの正確なコピーを持っています。原点が壊れている場合はコピーを使用します。
これまで、多くのDB実装にはこれらの多くが欠けていることがわかりました。また、適切なACIDと冗長性のサポートがない場合、ユーザーは最終的にデータを失うと思います。