ACID準拠のNoSQLデータストアはありますか?


156

ACID準拠のNoSQLデータストアはありますか?


2
実際には、酸に準拠したFoundationDBがありました。今Appleはそれを手に入れました
帽子のないユーザー

回答:


110

私はこれを純粋に会話をサポートするための回答として投稿します-Tim Mahynawroth、およびCraigTPは実行可能なデータベースを提案しています。Erlangを使用しているため、CouchDBが私の好みですが、他にもあります。

ACIDNoSQLの概念と矛盾または否定しないと思います... doveによって表明された意見に従って傾向があるように見えますが、概念は異なると主張します。

NoSQLは基本的に、従来のRDBMSの明示的なスキーマの直接の代替手段として、単純なキー値(Redisなど)またはドキュメントスタイルスキーマ(MongoDBなどの「ドキュメント」モデルで収集されたキーと値のペア)についてです。これは、開発者が扱うことを可能にするものを、従来のエンジンは、剛性施行しているのに対し、非対称的に同じネスをデータモデル間で。これが非常に興味深い理由は、変更を処理する別の方法を提供するためあり、より大きなデータセットの場合、ボリュームとパフォーマンスを処理する興味深い機会を提供します。

ACIDは、データベースへの変更の適用方法を管理する原則を提供します。非常に単純化された方法で、それは述べています(私自身のバージョン):

  • (A)データベースを変更するために何かを行うと、変更は全体として機能するか失敗するはずです
  • (C)データベースは一貫性を保つ必要があります(これはかなり広いトピックです)
  • (I)同時に他のことが起こっている場合、更新中に物事を見ることができないはずです
  • (D)システムが故障した場合(ハードウェアまたはソフトウェア)、データベースはそれ自体を回復できる必要があります。更新の適用が終了したと表示された場合は、それを確認する必要があります

伝播と制約のアイデアになると、会話はもう少し興奮します。一部のRDBMSエンジンは、伝播要素(カスケード)を持つ可能性のある制約(外部キーなど)を強制する機能を提供します。簡単に言えば、1つの「もの」はデータベース内の別の「もの」と関係がある可能性があり、1つの属性を変更した場合、もう1つの「変更」(更新、削除など)が必要になる場合があります。NoSQLデータベースは、主に(現時点では)大量のデータと大量のトラフィックに焦点を当てているため、(消費者の観点から)任意の時間枠内で発生する分散更新の概念に取り組んでいるようです。これは基本的にはレプリケーションを介して管理しますトランザクションの特殊な形式です -従来の分散データベースがACIDをサポートできれば、NoSQLデータベースもサポートできると言えるでしょう。

さらに読むためのリソース:


15
いい答えだ。NoSQL + ACIDと非ACID-RDBMSの両方を使用できます(MySQL + MyISAMと考えてください)。私は通常、 NoSQLを「結果的に整合性がある」と見なします。私もCAP定理を投入します... :-)
gbn

CAPの定理に言及するための+1 @gbn。「nosql」データベースに慣れ親しんだことは、当時は概念の分離を強化するだけでした。また、アーキテクチャの違いがあるため、Key-ValueデータベースとDocデータベース。
AJ。

CAPの定理について言及する場合は-1、それを書き込みます。https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html
Dinei

36

更新(2012年7月27日): ウィキペディアの記事へのリンクが更新され、この回答が投稿されたときの最新の記事のバージョンが反映されています。現在のウィキペディアの記事は大幅に改訂されていることに注意してください!

まあ、NoSQLに関するWikipediaの記事の古いバージョンによると:

NoSQLは、大まかに定義された非リレーショナルデータストアのクラスを促進する動きであり、リレーショナルデータベースとACID保証の長い歴史で壊れています。

そしてまた:

その名前は、ACIDの保証を提供しようとはしなかった、非リレーショナルな分散データストアの出現の増加を説明する試みでした。

そして

NoSQLシステムは、補足的なミドルウェア層を追加することで完全なACID保証を課すことができる場合でも、結果の一貫性や単一のデータ項目に制限されたトランザクションなどの弱い一貫性保証を提供することがよくあります。

つまり、簡単に言えば、「NoSQL」データストアの主な利点の1つは、ACIDプロパティが明確に欠けていることです。さらに、IMHOは、ACIDプロパティを実装して適用しようとするほど、取得する「NoSQL」データストアの「精神」から離れ、取得する「真の」RDBMSに近づきます(相対的に言うと、もちろん)。

ただし、「NoSQL」は非常にあいまいな用語であり、個々の解釈を受け入れるものであり、純粋主義的な見方がどれだけあるかに大きく依存します。たとえば、最近のほとんどのRDBMSシステムは、実際にはEdgar F. Coddの彼のリレーションモデル12のルールすべてに準拠していません。

実用的なアプローチをとると、ApacheのCouchDBは、疎結合で非リレーショナルな「NoSQL」の考え方を維持しながら、両方のACID準拠を具体化することに最も近いように見えます。


1
+1 ACIDの欠如が「NoSQL」の重要な特徴であることには同意できないと思いますが、私はあなたの記事を本当に感謝しています。最終的には、それは適切なソリューションに関するものでなければなりません。
AJ。

2
さらに明確にするために編集(保留中のレビュー)を行いました。ACIDトランザクションが不可能であることを意味するNoSQLデータモデルについては何もありません。一部のNoSQL分散システムにはそれらがありません。「ミドルウェア層」なしで実際に実行するものもあります。
エリックブロック

2
これは決して正しくなく、ソースを失ってさえいます。本当に削除する必要があります。
Lennart Regebro、2014年

2
さて、最も露骨に、これは、「簡単に言えば、 "NoSQL"データストアの主な利点の1つは、ACIDプロパティが明確に欠けていることです。」また、NoSQLとACIDが何らかの理由で相互に排他的であることも示唆していますが、これは間違いです。これは、多くの無知な人々が間違った答えを正当なように思わせるために賛成する場合の良い例です。ほとんどのNoSQLデータベースがACIDに準拠していないのは、ほとんどの場合、それを実装した人々は、それが何であるか、なぜ重要であるのか、または気にしなかったために、それを実装していなかったためです。
Lennart Regebro、2014年

@LennartRegebro-私はそのようなことを暗示していませんでした。実際、ACID準拠は現在のほとんどの既存のNoSQLデータベースによって避けられており、速度/パフォーマンスと結果の一貫性が優先されています。ただし、ACID準拠のNoSQLを使用できないとは決して言いませんでした。
CraigTP、2014年

20

NoSQLデータベースに関するMartin Fowlerの紹介を必ずお読みください。そして、対応するビデオ。

まず、2つのタイプのNoSQLデータベースを区別できます。

  1. 集約指向のデータベース。
  2. グラフ指向データベース(Neo4Jなど)。

設計上、ほとんどのグラフ指向データベースはACIDです!

次に、他のタイプについてはどうですか?

集約指向のデータベースでは、3つのサブタイプを配置できます。

  • ドキュメントベースのNoSQLデータベース(MongoDB、CouchDBなど)。
  • Key / Value NoSQLデータベース(Redisなど)。
  • 列ファミリーのNoSQLデータベース(Hibase、Cassandraなど)。

ここでアグリゲートと呼ぶのは、エリックエヴァンスがドメイン駆動設計で、特定の境界コンテキスト内のエンティティと値オブジェクトの自給自足として定義したものです。

結果として、集約は、1つの単位として対話するデータのコレクションです。集合体は、データベースとのACID操作の境界を形成します。(マーティン・ファウラー)

したがって、集計レベルでは、ほとんどのNoSQLデータベースは、適切な設定でACID RDBMSと同じくらい安全であると言えます。ソースのサーバーを最高の速度に調整すると、ACID以外のものが発生する可能性があります。しかし、レプリケーションは役立ちます。

私の主なポイントは、RDBMSの(安価な)代替としてではなく、NoSQLデータベースをそのまま使用する必要があるということです。ドキュメント間の関係を悪用するプロジェクトが多すぎます。これはACIDにはできません。ドキュメントレベル、つまり集計境界に留まる場合は、トランザクションは必要ありません。また、これらのトランザクションは必要ないため、本当にACIDでなくても、データはACIDデータベースと同じくらい安全です。トランザクションが必要で、一度に複数の「ドキュメント」を更新すると、NoSQLの世界にはいなくなります。代わりにRDBMSエンジンを使用してください。

一部の2019の更新:バージョン4.0以降、複数のドキュメントの更新に原子性が必要な状況や、複数のドキュメントの読み取り間の一貫性が必要な状況では、MongoDB がレプリカセットのマルチドキュメントトランザクションを提供します



多くの集計を処理する大きなプロセス/物語がある場合があります。アグリゲートに送信されたコマンドが、他のアグリゲートを変更するいくつかのイベントをトリガーする場合があります。これらの場合、ACID準拠のデータストアが必要です。
チューダー14

1
@TudorTudorしかし、この場合は、それをrdbmsとして使用しているため、nosqlの原則の1つを破っています。より大きな集合体またはドキュメントのバージョン管理(couchdbなど)が必要なだけです。Nosqlのドキュメント指向のデータベースは、ドキュメント/集合体の境界で優れています。
Arnaud Bouchez 2014

あなたがリストしたものはどれも、酸に準拠していません。Mongoは、ACIDに準拠していません。CouchDBは、2つのドキュメントを更新しない限り、これは酸に準拠しているように見せかけます。Redisは「トランザクションの部分的なサポート」のみを備えています。HBaseは(devsからの)酸に準拠していません。Cassandraも同様です。この答えは実際には間違っています。これらのデータベースはどれもACIDをサポートしていません。それらのほとんどは、単純なgoogle検索でオープンに所有しています。
エヴァンキャロル

@EvanCarroll MongoDBがACIDに準拠していることを、ACID RDBMSトランザクションと同じ意味で書いたことはありません。利用可能なトランザクションはありません。私が書いたことは、ほとんどのNoSQLデータベースは、適切な設定でACID RDBMSと同じくらい安全であるということです。たとえば、共有クラスターがないDBの$ isolated MongoDBオペレーターを確認します。財務プロセスにMongoDBを使用することは決してありませんが、原子性のAが十分であれば、ACIDのような操作では、その書き込みプロセスをある程度信頼できます。私の答えが紛らわしい場合は申し訳ありません。
Arnaud Bouchez 2017

18

FoundationDBはACIDに準拠しています。

http://www.foundationdb.com/

適切なトランザクションがあるため、ACID方式で複数の異種データアイテムを更新できます。これは、上位層でインデックスを維持するための基盤として使用されます。


6
残念ながら、それはオープンソースではありません。しかし、それは非常に素晴らしいデータベースのように見えます。
Kevin Cox

@ Ken-Tindellの回答まで追加すると、djondbもNoSQLであり、トランザクションを実装し、ACIDに準拠しています。 djondb.com 私は、NoSQLがRDBMSの従来のルールに従わないすべてのデータベースを作成するための単なる言葉であることに同意します。それは、「TXシステムを取り除く」、または関係を忘れるという意味ではありません。
クロス

3
AppleがFoundation DBを買収したことで私の答えは疑わしくなった。
ケンティンデル2015年

1
FoundationdbがAppleのオープンソースになりました
RBanerjee

17

この質問では、OrientDB について言及する必要があります。OrientDBは、完全なACIDトランザクションをサポートする数少ないデータベースの1つであるNoSQLデータベースです。ACIDはリレーショナル代数の一部ではないため、ACIDはRDBMS専用ではありません。したがって、ACIDをサポートするNoSQLデータベースを作成することは可能です。

この機能は、MongoDBで最も欠けている機能です


オープンソースは主にgithub.com/orientechnologies/orientdbですが、クローズドソースのエンタープライズ機能を備えています
basarat 2013

14

ACIDとNoSQLは完全に直交しています。一方は他方を意味しません。

私は自分の机の上にノートブックを置いています。それを使って、まだやらなければならないことについてメモをとっています。このノートブックはNoSQLデータベースです。「ページキャッシュ」を使用した線形検索を使用してクエリを実行するため、常にすべてのページを検索する必要はありません。また、一度に1つのものだけを書き、それを読んでいる間は絶対に書き込めないことを確認しているため、ACIDにも準拠しています。

NoSQLは単にSQLではないことを意味します。多くの人々は混乱し、それは非常にスケーラブルな野生の西の超高速ストレージを意味すると思います。そうではありません。Key-Valueストアや結果整合性を意味するものではありません。つまり、「SQLではない」ということだけです。この惑星には多くのデータベースがあり、それらのほとんどはSQLではありません[要出典]

他の回答で多くの例を見つけることができるので、ここにリストする必要はありませんが、さまざまな操作に対してACIDに準拠する非SQLデータベースがあり、一部は単一オブジェクト書き込みのみのACIDですが、はるかに多くを保証するものもあります。各データベースは異なります。



4
@ shmish111ではないです。この用語が最初に作られたときは、「SQLなし」を意味していました。「o」は小さく、結局のところ資本ではありません。これらの一部(NoSQL製品)がSQLに似たクエリ言語インターフェースを追加し始めたとき、後でこの用語を「Not Only SQL」として捉え直す試みがありました。
ypercubeᵀᴹ

11

「NoSQL」は明確に定義された用語ではありません。それは非常に漠然とした概念です。そのため、「NoSQL」製品とは何か、何でないかを言うことさえ不可能です。ラベルが通常付けられている製品のほとんどすべてがキーバリューストアであるわけではありません。


3
ベストアンサー。この炎上戦争が発生したとき、私は相手にNoSQLデータベースから明示的に必要とする定義機能を尋ねたいと思います。多くの場合、RDBMSにある機能と重複します。1つ以上のRDBMSがNoSQLテーマに適合するからではなく、単に機能の「要件」は非常に曖昧であり、完全に否定するわけではありません。機能は(必ずしもすべてではない)RDMBSにあります。コメント相手の+1!
StartupGuy 2013

8

はい、MarkLogicサーバーは、ACIDトランザクションで機能するNoSQLソリューション(私が呼び出したいドキュメントデータベース)です。


1
MarkLogicには、ACIDトランザクション、マルチドキュメントトランザクション、マルチステートメントトランザクション、およびXAのサポートがあり、すべてクラスタ全体/分散型です。
Eric Bloch

8

NoSQLの祖父:ZODBはACIDに準拠しています。http://www.zodb.org/

ただし、これはPythonのみです。


1
Pythonの「シェルフ」ライブラリからの移行を検討している人にとって、ZODBはほとんど見た目がないように見えました。すべての関数を書き直す必要はありませんでした-シェルブのように辞書としてZODBにアクセスするだけですが、桁違いに高速です。
Michael Galaxy

8

NoSQLの創始者の1人として(私はApache CouchDBの初期の寄稿者であり、2009年にCBS Interactive / CNETで開催された最初のNoSQLイベントの講演者でした)新しいアルゴリズムがこれまでになかった可能性を生み出すのを見て興奮しています。Calvinプロトコルは、CAPやPACELCなどの物理的制約を考える新しい方法を提供します。

Calvinは、アクティブ/パッシブ非同期レプリケーション、またはアクティブ/アクティブ同期レプリケーションの代わりに、RAFTのようなプロトコルを使用してトランザクションログを維持することにより、レプリカの停止時に正確さと可用性を維持します。さらに、トランザクションは各レプリカで決定論的処理され、デッドロックの可能性が排除されるため、合意は単一の合意でのみ達成されます。これにより、マルチクラウドの世界規模の展開でも高速になります。

FaunaDBは、Calvinプロトコルを使用した唯一のデータベース実装であり、NoSQLのスケールと柔軟性を備えたメインフレームのようなデータ整合性を必要とするワークロードに非常に適しています。



4

NewSQL

この概念Wikipediaの寄稿者は次のように定義しています。

[…]従来のデータベースシステムのACID保証を維持しながら、オンライントランザクション処理(OLTP)読み取り/書き込みワークロード用にNoSQLシステムと同じスケーラブルなパフォーマンスを提供しようとする最新のリレーショナルデータベース管理システムのクラス。[1][2][3]

参考文献

[1]ナンシーリンチとセスギルバート、「ブリューワーの予想と、一貫性があり、利用可能な、パーティショントレラントなWebサービスの実現可能性」、ACM SIGACT News、Volume 33 Issue 2(2002)、pg。51〜59。

[2] 「Brewer's CAP Theorem」、julianbrowne.com、2010年3月2日取得

[3] 「分散システムでのブリューワーズCAP定理」、royans.net


4

MongoDBは、その4.0バージョンがマルチドキュメントトランザクションに対してACIDに準拠することを発表しました。

バージョン4.2。分割セットアップでサポートすることになっています。

https://www.mongodb.com/blog/post/multi-document-transactions-in-mongodb


はい、MongoDBでマルチドキュメントACIDトランザクションがサポートされるようになりました。詳細については、mongodb.com / transactionsをご覧ください。
Grigori Melnik









1

BergDBは、最初からACIDトランザクションを実行するように設計された、軽量でオープンソースのNoSQLデータベースです。実際、BergDBは、データベースの状態を変更する唯一の方法が最高の分離レベル(SQL用語:「シリアライズ可能」)でACIDトランザクションを実行することであるという意味で、ほとんどのSQLデータベースより「より多く」のACIDです。ダーティリード、繰り返し不可の読み取り、またはファントムリードの問題はありません。

私の意見では、データベースは依然として非常に高性能です。私を信用しないで、私はソフトウェアを作成しました。代わりに自分で試してください。


1

最新のNoSQLソリューションの多くはACIDトランザクション(アトミック分離マルチキーアップデート)をサポートしていませんが、それらのほとんどはプリミティブをサポートしており、アプリケーションレベルでトランザクションを実装できます。

データストアがキーごとの線形化と比較と設定(ドキュメントレベルの原子性)をサポートしている場合は、クライアント側のトランザクションを実装するだけで十分です。さらに、いくつかのオプションから選択できます。

  1. シリアライズ可能な分離レベルが必要な場合は、GoogleがパーコレーターシステムまたはCockroachラボのCockroachDBに使用しているのと同じアルゴリズムに従うことができます。私はそれについてブログを書いて、ステップバイステップの視覚化を作成しました。それがアルゴリズムの背後にある主要なアイデアを理解するのに役立つことを願っています。

  2. 高い競合が予想されるが、Read Committed分離レベルを設定しても問題ない場合は、Peter BailisによるRAMPトランザクションを確認してください。

  3. 3番目のアプローチは、サガパターンとも呼ばれる補償トランザクションを使用することです。80年代後半にSagasの論文で説明されましたが、分散システムの登場により、より現実的になりました。インスピレーションについては、佐賀県パターン適用の講演をご覧ください。

クライアント側トランザクションに適したデータストアのリストには、軽量トランザクションを使用するCassandra、一貫性のあるバケットを使用するRiak、RethinkDB、ZooKeeper、Etdc、HBase、DynamoDB、MongoDBなどが含まれます。



0

VoltDBはACIDコンプライアンスを主張する参入企業であり、SQLを引き続き使用していますが、その目的はスケーラビリティに関して同じです


2
VoltDBの作成者は、NoSqlとしてではなくNewSqlに似ていると述べています(まだSqlを使用していますが、80年代に構築されたRDBMよりも実装が優れています)
Matt W

0

それはだながら、唯一組込みエンジンではなく、サーバ、leveldbは WriteBatchとACIDの動作を提供するために、同期書き込みをオンにする能力を持っています。





-1

NoSQLは設計上、ACIDに準拠していません。NoSQLの動きは、ACIDの反対であると主張されているBASE(基本的に使用可能、ソフト状態、結果整合性)を採用しています。NoSQLデータベースは、最終的に構成されたデータベースと呼ばれることがよくあります。違いを理解するには、CAPの定理(別名ブリューワーの定理)にドリルダウンする必要があります。

訪問http://www.julianbrowne.com/article/viewer/brewers-cap-theorem


CAP定理へのポインターはこの質問に非常に関連していると思います!
mxro

2
一部のNoSQLデータベースにはACIDトランザクションがあります。
エリックブロック

1
一部のnoSQLはACIDに準拠していると主張していますが、内部をドリルダウンすると、特定の場合にのみACIDであることに気づき、「最終的にACID」がないため、それらは間違いなくACIDではありません
Ste

1
あなたは根本的にCAPを誤って適用しています。CAPとACIDはせいぜい大まかに関連していますが、CAPは分散システムがACIDに準拠することを妨げません。CAPは、分散システムに必要なトレードオフについて説明しています。強整合性のあるNoSQLシステムは、パーティション中には使用できない場合がありますが、ACID準拠から除外されていません。
Jeff Jirsa 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.