ゼファーネットのロゴ

完璧なデータベースはありません: CAP 定理をデータベースの選択に適用する – DATAVERSITY

日付:

2000 年に市場に導入されて以来、一貫性、可用性、および分割の定理 (CAP 定理) はデータベース管理の指針となってきました。 コンピューター科学者の Eric Brewer は、Web サービスを提供する分散システムに関する講演で CAP 定理を紹介しました。 後に XNUMX 人の MIT 教授がこの定理を証明しました。 データベースは、データベースの一貫性、可用性、パーティション耐性という XNUMX つの領域のうち XNUMX つまたは XNUMX つにおいては強力であるが、XNUMX つすべてにおいて同時に強力であることはできない、と述べています。 たとえば、従来の SQL データベースは強整合性を優先しますが、ネットワーク障害時に可用性が損なわれる可能性があります。 対照的に、 NoSQLデータベース 可用性とパーティション耐性を優先しますが、最終的に一貫性が失われることを許容する場合があります。 CAP 定理は分散システムの固有の制限を説明しており、さまざまなデータベースに適用されます。 設計者は、データベースを実装する前に、組織にとってどの XNUMX つの CAP 保証が最も重要であるかを慎重に検討することが重要です。

一貫性、可用性、およびパーティショントレランスの定義 

分散システムは複数のコンピューターとサーバーに分散され、大量のデータを処理するためのソリューションを提供します。 一貫性 分散システムでは、データがノード間で正しく同一に表示される度合いを指します。 これは、複数のユーザーが同時に変更を加えることを防ぐロックによって実現できます。 一貫性を優先するシステムは信頼性が高く、堅牢です。 一貫したシステムでは、各サーバーは指定されたリクエストに適切な応答を送信します。 一貫性の意味は、要求されるサービスの種類によって異なります。 些細で弱い 一貫したサービスは、それぞれサーバー間の調整を必要としない、またはサーバー間のわずかな調整のみを必要とし、CAP 定理の範囲には入らず、一般に可用性とパーティション耐性を犠牲にすることを回避します。 ただし、サーバー間の大幅な調整が必要なサービスでは、CAP のトレードオフが発生します。

商品在庫 システム内のすべてのノードが一貫して読み書きできる能力を指します。 利用可能なシステムでは、ユーザーからのすべてのリクエストは確実に応答を受け取ります。 一部のノードが故障した場合でも、利用可能なシステムはユーザーの要求に応答し続けます。 ただし、可用性を優先するシステムでは、返されるデータが完全に最新であることを保証できないことがよくあります。 

In パーティショントレラント システムでは、データが複数のサーバーに分散され、部分的な障害やネットワークの分割が発生した場合の堅牢性が向上します。 ネットワーク パーティションでは、ノードが複数のサブネットに分割され、相互に簡単に通信できません。 一般に、広範囲に分散されたシステムではパーティションは避けられないと考えられています。 パーティション トレラント システムは、このような分割に直面しても迅速に回復し、機能を維持する機能を備えています。 

適切なデータベースを見つける

Oracle や MySQL など、一貫性と可用性を優先するデータベースは、銀行アプリケーションやトランザクション処理などのユースケースに最適です。 以前は、システムは一貫性と可用性を優先していましたが、データ システムとストレージが進化するにつれて、一貫性の重要性は低下し始めています。 多くの場合、新しいシステムには、複数のユーザーが同時に変更を加えることが許可されるユースケースがあります。 このような場合、パーティション耐性が優先されます。

MongoDB、Redis、Google Spanner など、一貫性がありパーティション耐性のあるデータベースは、ドキュメントの保存に最適です。 たとえば、Google ドライブは、整合性とパーティション トレランス (CP) データベースである Google Spanner を利用しています。 CP データベースの欠点は、ネットワークの分断中に使用できなくなる可能性があることです。 たとえば、Google ドライブのユーザーは、短期間ドキュメントにアクセスできなくなることがあります。 

一方、可用性とパーティション耐性を優先するデータベースは、データ分析操作など、速度が最も重要なユースケースに最適です。 Netflix は Cassandra と呼ばれる可用性とパーティション トレランス (AP) データベースを使用しており、Airbnb は Riak として知られるデータベースを使用しています。 AP データベースは一貫性をある程度犠牲にします。 読み取り時にデータベースがパーティション化されている場合、読み取り操作では古い値が返される可能性があります。

各データベースには固有の長所と短所があるため、最適なデータベースを選択するには、組織の要件と特定のアプリケーションを完全に理解する必要があります。 事前に明確なサービス レベル目標 (SLO) を確立し、サービス レベル指標 (SLI) を定期的に追跡することが重要です。 データベースの規模は、実装時とさらなる成長の可能性の両方において、重要な考慮事項です。

もう XNUMX つの考慮事項は、データをセグメントに分割してサーバー間で共有するデータ シャーディングです。 これは、可用性とパーティション耐性が向上し、災害復旧とバックアップが容易になるため、特定のデータベースにとって有利です。 シャーディングでは、一貫性に関していくつかの犠牲が伴います。 データのシャーディングが適切かどうかを判断することは、データベース設計を計画する際の重要な部分です。 

CAP のトレードオフを最小限に抑える方法 

完璧な一貫性、可用性、およびパーティション耐性を提供できるデータベースはありませんが、CAP のトレードオフを軽減する方法はいくつかあります。 データベース レプリケーションでは、ソース データベースから他のデータベースにデータが継続的にコピーされ、一貫性を優先するデータベースであっても、可用性とパーティション耐性が向上します。 ハイブリッド アーキテクチャでは、XNUMX つの異なるデータベース (たとえば、リレーショナル データベースと NoSQL データベース) を組み合わせて、両方の設計の利点を活用しながら、欠点を最小限に抑えます。 

分散システムをセグメントに分割すると、システムは特定のデータまたは操作にとって最も重要な CAP 要素に優先順位を付けることができます。 一部のアーキテクチャには、さまざまなユースケースに対応する複数の個別のデータベースが組み込まれています。 たとえば、オンライン マーケットプレイスの Etsy は、強整合性のために MySQL データベースを使用しています。 メモリ内キャッシュ用の高可用性 Redis。 もう XNUMX つは、ストリーミング データ用のパーティション トレランスを優先する Apache Kafka です。

多くの新しいデータベースは、CAP 定理によって説明される制限を克服しようとしています。 CockroachDB は、Raft コンセンサス アルゴリズムを使用して、データベースのすべてのレプリカが書き込み順序に一致することを保証する分散 SQL データベースであり、一部のレプリカに障害が発生した場合でもデータベースが利用可能な状態を維持します。 これにより、CockroachDB は、ネットワークが分断されている場合でも、強力な一貫性と可用性を提供できます。 もう XNUMX つの新しい分散 SQL データベースである TiDB は、Raft コンセンサス アルゴリズムを利用して、大規模アプリケーションに強力な一貫性と可用性を提供します。

データベース設計の未来

新しい技術や のトレンドを利用する CAP 定理のトレードオフにさらに対処できる可能性があります。 多くのデータベース設計者は、スケーラビリティ、弾力性、耐障害性など、オンプレミスのデータベースに比べて多くの利点があるクラウドベースのアーキテクチャに移行しています。 マルチクラウド展開により、ハイブリッド データベース アーキテクチャの実装が容易になります。 機械学習 (ML) アルゴリズムを使用すると、ワークロード パターン、アプリケーション要件、データ アクセス パターンに基づいて、一貫性と可用性のバランスを動的に調整できます。 調整可能な可用性と一貫性のトレードオフ (TACT) Haifeng Yu と Amin Vahdat によって開発されたこのシステムにより、アプリケーションは必要な一貫性のレベルを継続的に更新できます。 最後に、量子コンピューティングが成熟するにつれて、データの完全性、機密性、一貫性を確保するためにデータベースに耐量子暗号技術が組み込まれる場合があります。

CAP 定理は、さまざまなデータベースの長所と限界を理解するための有用なフレームワークを提供します。 完璧なデータベースはありませんが、特定のアプリケーションには他のデータベースよりも適したデータベースもあります。 多くの場合、企業は可用性や利便性に基づいてデータベースを選択します。 これにより、組織のニーズが満たされずに不必要なコストが発生する可能性があります。 その代わりに、開発者はデータベースの基礎と特定の使用例の詳細を十分に理解することが重要です。 実装前に、XNUMX つのデータベース プロパティのうちどれがアプリケーションにとって最も重要かを判断し、具体的なサービス レベルの目標と指標を定義することが重要です。 単一のデータベースで一貫性やパーティション耐性を実現することは不可能かもしれませんが、 & 可用性、ハイブリッド、マルチデータベース アーキテクチャにより、データベースの弱点を軽減できます。 クラウド コンピューティングや ML などの新しいテクノロジーや開発がデータベース設計の分野に影響を与え続けるにつれて、開発者が CAP トレードオフに対処する方法も進化し続けるでしょう。

スポット画像

最新のインテリジェンス

スポット画像