ACIDとBASEについて

システムアーキテクチャ

トランザクションモデルであるACIDとBASEについて述べる。

##ACIDとは

ACIDは、主にリレーショナルデータベース(RDB)で用いられるトランザクションの4つの性質を表す。

特性 意味 概要
Atomicity(原子性) トランザクションはすべて成功するか、すべて失敗する All or Nothing - 中途半端な状態は残らない
Consistency(一貫性) データベースの整合性制約が常に保たれる 制約・トリガー・ルールが維持される
Isolation(分離性) 並行実行されるトランザクションが互いに影響しない 同時実行でも逐次実行と同じ結果
Durability(永続性) コミット済みの変更は永続的に保存される システム障害でも変更は保持される

ACID適用の具体例

  • 銀行振込:A口座-1万円、B口座+1万円が同時成功または同時失敗
  • ECサイト在庫:在庫減算と注文確定が原子的に実行
  • 予約システム:座席の二重予約を防ぐ排他制御

ACIDの実装技術

  • ロッキング:共有ロック・排他ロック
  • MVCC:Multi-Version Concurrency Control
  • WAL:Write-Ahead Logging
  • 2PC:Two-Phase Commit(分散環境)

##BASEとは

BASEは、主にNoSQLや大規模分散システムで用いられる、ACIDよりも緩やかな整合性モデルである。BASEは次のような3つの特性を持つ。

特性 意味 概要
Basically Available(基本的可用性) ある程度常に応答を返す 完全な整合性がなくても利用可能
Soft state(ソフトステート) 状態は変化しうる データが一時的に不整合でも許容
Eventual consistency(最終的整合性) 最終的には整合性がとれる 時間が経てば整合することを前提

BASE適用の具体例

  • SNS投稿配信:フォロワーのタイムラインに段階的に配信
  • 検索インデックス:新コンテンツが検索結果に数分後に反映
  • CDN更新:世界各地のキャッシュが順次更新される

BASEの実装技術

  • 結果整合性:Read Repair、Anti-Entropy
  • 競合解決:Last Writer Wins、Vector Clock、CRDT
  • 分散合意:Gossip Protocol、Merkle Tree
  • 分散ストレージ:Consistent Hashing、Quorum

##ACID vs BASE:設計思想の違い

比較軸 ACID BASE
整合性 強い整合性(Strong) 最終的整合性(Eventual)
可用性 障害時に低下する可能性 高可用性を維持
分散性 分散環境では制約が多い 分散システム向けに設計
レイテンシ 一貫性保証のため遅延発生 低レイテンシを優先
トレードオフ Consistency > Availability Availability > Consistency
適用分野 金融・業務系・トランザクション Webサービス・スケーラブルアプリ

##まとめ ACIDはリレーショナルデータベースのトランザクションにおける強い整合性を提供し、BASEは分散システムでの柔軟な整合性を実現する。アプリケーションの要件に応じて、どちらのモデルを選択するかが重要である。ACIDは金融や業務系アプリケーションに適し、BASEはWebサービスやスケーラブルなアプリケーションに向いている。

##参考文献・関連資料


関連書籍