ACID データベースと BASE データベースの違いは何ですか?

ACID と BASE は、データベースがデータをどのように整理および操作するかを決定するデータベーストランザクションモデルです。データベースのコンテキストでは、トランザクションとは、データベースが単一の作業単位と見なす任意の操作です。データベースの一貫性を保つには、トランザクションが完全に完了する必要があります。たとえば、ある銀行口座から別の銀行口座に送金する場合、そのお金はあなたの口座から引き出され、第三者の口座に追加される必要があります。両方のステップを実行しないと、トランザクションが完了したとは言えません。 

ACID データベースは、可用性よりも一貫性を優先します。つまり、トランザクション内のいずれかのステップでエラーが発生すると、トランザクション全体が失敗します。対照的に、BASE データベースは一貫性よりも可用性を優先します。ユーザーはトランザクションに失敗する代わりに、一貫性のないデータに一時的にアクセスできます。データ整合性は達成されますが、すぐには達成されません。

なぜ ACID と BASE が重要なのですか?

最新のデータベースは、ネットワークで接続された複数のノード間でデータを複製する分散データストアです。これにより、ユーザーは 1 回のトランザクションで読み取りや書き込みなどの複数のデータ操作を実行できます。ユーザーは、トランザクションの終了時にすべてのノードでデータの一貫性が保たれることを期待しています。しかし、理論的なコンピュータサイエンスでは、ブリューワーの定理 (CAP 定理とも呼ばれる) では、どの分散データストアでも次の 3 つの保証のうちの 2 つしか提供できないとされています。

  • 一貫性:すべての読み取り操作は、最新の更新データまたはエラーを受け取ります。
  • 可用性:すべてのデータベースリクエストは、最新の更新データが含まれていることを保証することなく、正常な応答を受け取ります。
  • 分断耐性:分散ノード間でメッセージがドロップまたは遅延しても、システムは動作し続けます。

たとえば、ある顧客が E コマース Web サイトのカートに商品を追加した場合、他のすべての顧客にはその商品の在庫レベルが低下するはずです。お客様が最後の商品をカートに追加した場合、他のすべてのユーザーはその商品が在庫切れと表示されるはずです。トランザクション内で何らかの操作が失敗した場合、データベース設計者は選択を行う必要があります。データベースは次のいずれかを実行できます。

  1. トランザクションをキャンセルしてエラーを返すため、可用性は低下しますが、一貫性は確保されます。カートへの追加が成功するまで、お客様は商品をカートに追加できません。また、他のお客様はすべての商品の詳細を読み込むことができません。
  2. 操作を続行すると可用性が確保されますが、一貫性が失われる可能性があります。お客様はカートに商品を追加しましたが、他のお客様には少なくとも一時的に誤った在庫レベルが表示されています。

ユースケースによっては、一貫性が重要であり、ACID データベースが好まれる場合があります。ただし、重要ではないユースケースは他にもあります。たとえば、ソーシャルメディアで友達リクエストを承諾したときに、あなたのソーシャルメディアのプロフィールで他のユーザーに表示される友達の数が一時的に間違っていても問題ありません。ただし、データがソートされている間、ソーシャルメディアフィードにアクセスできなくなることは避けたいものです。このようなシナリオでは、BASE が重要になります。

主な原理:ACID と BASE の比較

ACID と BASE は、オンライントランザクション処理中のデータベースの動作を表すさまざまなデータベースプロパティの略語です。 

ACID

ACID は、原子性、一貫性、分離性、耐久性の略です。

原子性

Atomicity は、1 つのデータベーストランザクションのすべてのステップが完全に完了するか、元の状態に戻ることを保証します。たとえば、予約システムでは、座席の予約と顧客詳細の更新という両方のタスクを 1 回のトランザクションで完了する必要があります。顧客プロファイルが不完全な場合、座席を予約することはできません。トランザクションの一部が失敗しても、データは変更されません。

整合性

一貫性により、データが事前に定義された整合性制約とビジネスルールを満たしていることが保証されます。複数のユーザーが同じような操作を同時に実行しても、すべてのユーザーでデータの一貫性が保たれます。たとえば、一貫性があると、ある口座から別の口座に資金を移動しても、取引前後の合計残高は変わりません。アカウント A が 200 USD で、アカウント B が 400 USD の場合、合計残高は 600 USD です。A が 100 USD を B に送金すると、A は 100 USD、B は500 USD なります。合計残高はまだ 600 USD です。 

分離

分離により、特定のレコードにアクセスする新しいトランザクションは、前のトランザクションが終了するまで待ってから操作を開始します。これにより、同時実行中のトランザクションが互いに干渉し合うことがなく、連続して実行されているかのような錯覚が保たれます。別の例として、マルチユーザー在庫管理システムがあります。あるユーザーが製品の数量を更新した場合、同じ製品情報にアクセスする別のユーザーには、コミットされるまで進行中の更新の影響を受けない、一貫性のある個別のデータビューが表示されます。

耐久性

耐久性により、システムに障害が発生した場合でも、データベースにコミットされたすべてのレコードが保持されます。ACID トランザクションがコミットされても、すべての変更が永続的であり、その後のシステム障害の影響を受けないことが保証されます。たとえば、メッセージングアプリケーションでは、ユーザーがメッセージを送信し、配信が成功したことの確認を受け取ったときに、耐久性プロパティによってメッセージが失われることはありません。これは、アプリケーションまたはサーバーに障害が発生した場合でも当てはまります。

ベース

BASE は、基本的に利用可能で、ソフトな状態で、最終的には一貫性のある状態を表します。この頭字語は、BASE が同等の化学物質のように、ACID の反対であることを強調しています。

基本的に利用可能

基本的に利用できるのは、ユーザーがいつでもデータベースに同時にアクセスできることです。あるユーザーは、レコードを更新する前に、他のユーザーがトランザクションを完了するのを待つ必要はありません。たとえば、e コマースプラットフォームでトラフィックが急増した場合、システムは商品リストの提供と注文の受付を優先する場合があります。在庫数量の更新が少し遅れても、ユーザーは引き続き商品をチェックアウトします。

ソフトステート

ソフトステートとは、外部トリガーや入力がなくても、データには一時的または一時的な状態があり、時間の経過とともに変化する可能性があるという概念を指します。複数のアプリケーションが同時にレコードを更新したときのレコードの移行状態を表します。レコードの価値は、すべてのトランザクションが完了して初めて最終的に確定されます。たとえば、ユーザーがソーシャルメディアの投稿を編集した場合、その変更は他のユーザーにすぐには表示されない場合があります。ただし、後で投稿は、ユーザーがトリガーしていなくても (古い変更を反映して) 自動的に更新されます。

結果的に整合性のある読み込み

最終的に整合性があるということは、同時更新がすべて完了した時点でレコードの整合性が保たれることを意味します。この時点で、レコードをクエリするアプリケーションには同じ値が表示されます。たとえば、複数のユーザーが同時に文書を編集できる分散型文書編集システムを考えてみましょう。ユーザー A とユーザー B の両方がドキュメントの同じセクションを同時に編集する場合、変更が反映されて同期されるまで、ローカルコピーは一時的に異なる場合があります。しかし、時間が経つにつれて、システムは、さまざまなユーザーが行った変更を伝播してマージすることで、最終的な一貫性を確保します。

主な違い:ACID と BASE の比較

ACID データベーストランザクションモデルと BASE データベーストランザクションモデルのどちらを選択するかにはトレードオフがあります。

スケール

ACID データベーストランザクションモデルは一貫性に重点を置いているため、スケーリングが困難です。どのレコードでも一度に許可されるトランザクションは 1 つだけであるため、水平スケーリングはより困難になります。 

または、厳密な一貫性を維持する必要がないため、BASE データベースモデルを水平方向にスケーリングすることもできます。データベースクラスター全体に複数のノードを追加することで、データベースアーキテクチャの原理である BASE モデルのデータ可用性を向上させることができます。 

柔軟性

ACID データベースは、データを扱う際の柔軟性が低くなります。ACID データベースは、ネットワークや停電が発生した場合に一部のアプリケーションへのアクセスを制限する可能性があるため、即時の一貫性を保証する必要があります。同様に、他のソフトウェアモジュールが特定のレコードを処理している場合、アプリケーションは自分の順番を待ってデータを更新する必要があります。逆に、BASE データベースの方が柔軟性があります。BASE では、厳密な制限を課すのではなく、使用可能なレコードをアプリケーションで変更できるようにしています。 

パフォーマンス

ACID データベースでは、大量のデータや同時処理要求を処理するときにパフォーマンスの問題が発生する可能性があります。データは厳密な順序で処理されるため、各トランザクションのオーバーヘッドにより遅延が発生し、レコードにアクセスするすべてのアプリケーションに影響します。 

これとは対照的に、BASE データベースにアクセスするアプリケーションはいつでもレコードを処理できます。これにより、過剰な待機時間が短縮され、データベースのスループットが向上します。

ファイル同期

ACID データベースには、トランザクションからの変更をコミットし、関連するすべてのレコードに反映するための同期メカニズムが必要です。同時に、トランザクションが完了するか破棄されるまで、特定のレコードを他の関係者からロックする必要があります。一方、BASE データベースはレコードをロックせずに実行されるため、最終的には時間の保証なしに同期されます。BASE データベースを扱う場合、開発者は特定のレコードを処理する際に不整合が生じる可能性があることを知っているため、アプリケーションで必要な予防措置を講じます。 

使用時期:ACID と BASE の比較

違いはありますが、ACID データベースシステムと BASE データベースシステムはどちらもさまざまなアプリケーションに適しています。ACID は、データ整合性、信頼性、予測可能性を必要とするエンタープライズアプリケーションにとって理想的なオプションです。たとえば、銀行はデータの完全性が最優先事項であるため、顧客の取引を保存するために ACID データベースを使用しています。一方、構造化されていない大量のデータのオンライン分析処理には、BASE データベースの方が適しています。たとえば、e コマース Web サイトは BASE データベースを使用して製品価格を更新しますが、価格は頻繁に変更されます。この場合、価格設定の正確さは、すべての顧客が製品価格にリアルタイムでアクセスできるようにすることほど重要ではありません。

データベースを ACID と BASE の両方にすることはできますか?

CAP 定理によれば、データベースは一貫性、可用性、および分断耐性の 3 つの保証のうちの 2 つを満たすことができます。ACID データベースモデルと BASE データベースモデルはどちらも分断耐性を備えているため、高い一貫性と可用性の両方を実現することはできません。つまり、データベースは ACID か BASE のどちらかに傾いていますが、両方にすることはできません。たとえば、SQL データベースは ACID モデルに基づいて構造化されていますが、NoSQL データベースは BASE アーキテクチャを使用しています。ただし、NoSQL データベースの中には、特定の ACID 特性を示すものもありますが、ACID 準拠のデータベースとしては動作しません。 

相違点の要約:ACID と BASE の比較

 

ACID

ベース

拡張性

垂直方向にスケーリングします。

水平方向にスケーリングします。

柔軟性

柔軟性は低めです。処理時に他のアプリケーションからの特定のレコードをブロックします。 

より柔軟。複数のアプリケーションで同じレコードを同時に更新できます。

パフォーマンス

大量のデータを処理するとパフォーマンスが低下します。

大量の非構造化データを高いスループットで処理できます。 

ファイル同期

はい。同期時に遅延を追加します。 

データベースレベルでの同期は行われません。 

AWS はお客様の ACID および BASE データベースの要件をどのようにサポートできますか?

AWS クラウドデータベースは、あらゆるタイプのデータユースケースに対応するさまざまな ACID および BASE データベースサービスを提供します。組織はデータベースを AWS にデプロイして、データストレージインフラストラクチャのプロビジョニング、スケーリング、管理にかかる時間を節約します。以下に例を示します。

  • Amazon DynamoDB は、クラウドアプリケーションのミリ秒単位のデータ処理を可能にする高速な BASE データベースサービスです。
  • Amazon MemoryDB for Redis は、開発者がウェブアプリケーションやモバイルアプリケーション向けに耐久性と可用性の高い Redis データベースをデプロイできるようにする、もう 1 つの BASE データベースです。
  • AWS RedShift は ACID クラウドデータウェアハウスで、ビジネスインテリジェンスのユースケース向けに複雑な SQL 分析クエリを実行できます。 

今すぐアカウントを作成して、ACID および BASE データベースを使い始めましょう。