NoSQLデータベースにより、データが時々失われる可能性はありますか?


8

現在、新しいプロジェクトで使用するデータベースを評価しています。これには、大量の取引データの挿入とクエリが必要になります。私たちのチームはCassandraに傾いていますが、ACIDに準拠していないデータベースを使用すると、データが時折失われる可能性があることを示唆していると思われるこの記事を読みました。

http://www.dbms2.com/2010/09/21/acid-plied-transaction-integrity/

Webでこれに関する詳細情報を見つけることができず、非ACIDコンプライアンスがデータ損失が発生する可能性があることを理解できません。誰かが光を当てることはできますか?


Neo4jは、実際にはACIDに準拠するNOSQL(グラフ)データベースです。完全なトランザクションサポートと永続的な永続性が付属しています。Neo4jはまた、トランザクションログを使用して、データストアに適用する前に書き込み操作を保護します。免責事項:私はネオテクノロジーのために働いています。
Michael Hunger

3
マーフィーの法則(および私自身の経験)によると、どのデータベースでデータを失う可能性があります。
a_horse_with_no_name 2013年

より良い言い回しは、「NoSQLデータベースには、従来のRDBMSよりもデータの損失または破損の可能性が大幅に高いか?」まだ少しあいまいです。
Jon of All Trades

いくつかのNoSQL製品は、単一行のACIDityを提供します。複数行のACIDを提供するものはほとんどありません。ユースケースがストリームの単一キー書き込みである場合、成功できます。多くのビジネス領域では、変更を有効にする前に、複数の行を同時に一貫させることが重要です。
マイケル・グリーン

回答:


6

ACIDと

  • 原子性
  • 一貫性
  • 隔離
  • 耐久性

これが意味することは、「すべての書き込みアクションは1回だけ行われ(重複レコードはありません)、アクションが完了するとデータベースに完全に保存されます」、つまり、読み取るたびに必要なデータが得られます。 。

NoSQLデータベースの重要な点は、データベースが頻繁に分散される(つまり、安価でフラットスケーラブルなシステムが求められる)ことです。つまり、すべてのノードにデータを複製するのに時間がかかります。場合によっては、書き込み中に読み取りを行い、新しいデータが出力されている間に古いデータで終了する可能性があります。

あなたはスピードのために純粋さを犠牲にしている。

これは私の回答の短いバージョンであり、さらに説明する必要があるかわかりません。私に何かを聞いて!


1
あなたが説明しているものは、即時整合性(RDBMS)と結果整合性(NoSQL)のように聞こえます。ただし、リンクされた記事では、実際データが失われる(データの一貫性が失われているだけではない)と述べられており、ACIDコンプライアンスがデータ損失とどのように関係するのか理解できません。
デルの

1
おそらく耐久性。それが事実です。それが私が説明していることです(データが失われたように見えます)。ACIDの要点は、データを失うことができないということです。ずっと。(まあそれは損傷して失われる可能性があります)
jcolebrand

私が調べたすべてのNoSQLデータベース(HBase、Cassandra、Redis)は、変更が永続化される前にデータベースがクラッシュした場合に再生できる先読みログを使用します。つまり、この批判はこれらのデータベースのいずれにも当てはまらないということですか?
デルの

私はそう思います。明日はこれを再訪しますが、とりあえず就寝時です。うまくいけば、それまでに私の以外にもいくつかの入力を取得できます;-)
jcolebrand

6

これは何年も前の質問ですが...

つまり、予想されるあらゆる状況でデータの整合性/安全性保証するものとして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)以外の比較です。したがって、耐久性属性も確認することを忘れないでください。範囲が広くなりすぎて耐久性の比較が非常に難しい。私はこのトピックをよく知りません…

  • 耐久性なし。データはいつでも失われます。

  • 安全にディスクに保存されます。を取得するCOMMIT OKと、データはディスク上で保証されます。ディスクが破損するとデータが失われます。

また、ACID準拠のDBでも違いがあります。

  • 時々ACID準拠/設定が必要/自動的なものがない.... /一部のコンポーネントはACIDに準拠していない/非常に高速だが、これを無効にする必要がある... /特定のモジュールを使用する場合はACID準拠... = weデフォルトでは、データの安全性はバンドルされません。それは、アドオン、オプション、または別売りです。ダウンロード、アセンブル、セットアップ、適切なコマンドの発行を忘れないでください。とにかく、データの安全性は黙って無視されます。自分でやれ。自分で確認してください。間違えないように頑張ってください。この種のDBを安全に使用するには、チームの全員が完璧なDBAでなければなりません。MySQL。

  • 常にACID準拠=データの安全性をパフォーマンスなどと交換することはありません。データの安全性は、このDBパッケージの強制バンドルです。ほとんどの商用RDBMS、PostgreSQL。

上記は典型的なDBの実装です。それでも、他のハードウェア障害によりデータベースが破損する可能性があります。メモリエラー、データチャネルエラー、その他の考えられるエラーなど。したがって、追加の冗長性が必要であり、実際の本番品質のDBはフォールトトレランス機能を提供する必要があります。

  • 冗長性はありません。データが破損すると、すべてのデータが失われます。

  • バックアップ。スナップショットのコピー/復元を行います。最後のバックアップ後にデータを失います。

  • オンラインバックアップ。データベースの実行中にスナップショットバックアップを実行できます。

  • 非同期レプリケーション。1秒ごと(または指定した期間)のバックアップ。マシンがダウンした場合、このDBはリブートするだけでデータを確実に戻すことができます。最後の1秒後にデータが失われます。

  • 同期レプリケーション。データの更新ごとにすぐにバックアップします。あなたは常に元のデータの正確なコピーを持っています。原点が壊れている場合はコピーを使用します。

これまで、多くのDB実装にはこれらの多くが欠けていることがわかりました。また、適切なACIDと冗長性のサポートがない場合、ユーザーは最終的にデータを失うと思います。


5

「状況によります」が答えですここで説明されている構成オプションがあります。

小さなnitpick:ACIDは機能のスーパーセット(ACID)であるため、データベースは耐久性がありますが、ACIDに準拠していません。NoSQLデータベースが完全にACIDであると主張することはできないと思いますが、それらの多くは、耐久性などの個別のサブ要件を通過すると主張する場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.