web-dev-qa-db-ja.com

CAP定理でRDBMSパーティショントレラントが機能しないのはなぜですか?

CAP定理でRDBMSがCAであることについて理解できない2つの点:

1)RDBMSはnotPartition Tolerantと書かれていますが、RDBMSはany less MongoDBやCassandraなどの他のテクノロジーよりもパーティションに耐性がありますか? CAをあきらめてAPまたはCPにするRDBMSセットアップはありますか?

2)CAPはどのように利用できますか?マスタースレーブ設定ですか?マスターが死んだときのように、スレーブが書き込みを引き継ぎますか?

私はDBアーキテクチャとCAP定理の初心者なので、ご容赦ください。

23
Glide

現在、多くのデータベースは実際には異なる構成になっており、設定に応じて、CA、CP、APなどのいずれかになりますが、3つすべてを同時に達成することはできません。一部のデータベースは、実際には3つすべてをサポートするように努力していますが、それでも特定の方法で優先順位を付けています。

たとえば、MySQLは、構成に応じてCPおよびCAになります。デフォルトでは、データがスレーブに複製されるマスタースレーブパラダイムに従うため、CAです。スレーブのセットがマスターへの接続を失った場合、パーティショントレランスが犠牲になり、独自のスレーブセットを持つ2つのマスターを作成する新しいマスターを選択することを決定します。

ただし、MySQLには、クラスター構成である別の構成もあります。たとえば、可用性よりもCPを優先します。すべてのデータを処理するのに十分なライブノードがない場合、クラスターはシャットダウンします。

MySQLには他のCAP定理の組み合わせを満足させる構成がおそらくもっとあるでしょう。時々、データベースはある構成に対してより良いので、特定の構成を使用する際に発生する可能性のある問題の種類を確認するのが最善です。

CAP定理の実装については、さまざまなデータベースをさらに調べ、CAP定理の優先順位をどのように実装するかをアドバイスします。それらを実装する方法は多すぎます。一般に、マスタースレーブモデルはCAシステム、APシステムのハッシュリングなどに使用されます。

21
Will C

CAP定理は問題があり、分散データベースシステムにのみ適用されます。データベースを分散すると、ネットワークパーティションとノードのクラッシュが発生する可能性があります。また、ネットワークパーティションが発生した場合は、パーティションの許容範囲(CAPのP)が必要です。

ですから、あなたの質問に答えるには1)それはCPまたはAPです。それはウィルが述べたように構成することができます。

パーティショントレランスが必須である理由の詳細: https://codahale.com/you-cant-sacrifice-partition-tolerance/

CAP定理に関する問題の詳細: https://martin.kleppmann.com/2015/05/11/please-stop-calling-databases-cp-or-ap.html

0
Jani Siivola

RDBMSがCAPのすべての特性を持つことができることに同意します。私はnoSQL DBの研究を始めており、IBM DB2の経験がありました。

IBM DB2が3つのCAPプロパティすべてを満たす方法は次のとおりです

  1. C:一貫性:RDBMSのトランザクションの性質により、すべてのリレーショナルデータベースはこれを満たします。

  2. A:可用性:可用性とは、存在するデータに対してクエリが行われたときに返されることを意味します。この場合も、リレーショナルデータベースは、これを簡単に実行できるように設計されています。

  3. P:パーティショントレランス:これは最も興味深いものです。 DB2の観点から、私が取り組んでいたアプリケーションでは、2つのデータベースがさまざまなデータセンターに分散していた。 1つはプライマリであり、ハートビートを介してセカンダリと通信しました。これらのプライマリデータベースとセカンダリデータベースのそれぞれには、12の物理インスタンスがあり、事前定義されたロジックに基づいてデータが分散されていました。プライマリがダウンすると、セカンダリがこれを検出し、プライマリの代わりになります。プライマリとセカンダリは常に同期されているため、データの整合性も維持されます。

これが、RDBMSがCAP定理の3つの特性すべてを満たすと私が思う方法です。

私は間違っているかもしれず、これについての議論にオープンです。

0
Nishit