本記事は教養記事シリーズその33です。その他の教養記事はコチラの目次をご覧ください。
トランザクションとは?
ACID特性とは?
CAP定理とは?
BASE特性とは?
読みたい場所へジャンプ!
トランザクション処理
ACID特性は,データベースにおけるトランザクション処理が持つべき性質の頭文字を取ったものです。
データベースは,「ある一定の規則に従って整理された大量のデータの集まり」のことを指します。詳しくはコチラの記事でお話ししています。トランザクションというのは,処理のかたまりを表す単位です。有名な例がありますので,少し紹介してみますね。
Aさんは大学から一人暮らしを始めることになり,実家から仕送りを月5万円もらうことになりました。そこで,ある月の仕送りをもらうことを考えてみます。データベースというのは,「銀行でのお金を保管するシステム」のことを指します。トランザクション処理というのは,「実家の口座から5万円を引いて,Aさんの口座に5万円を入れる操作」のことを指します。
ACID特性
ACIDは,原子性/一貫性/独立性/永続性の4特性のことを指しています。
1.Atomicity(原子性)
2.Consistency(一貫性)
3.Isolation(独立性)
4.Durability(永続性)
原子性というのは,これ以上分割できないこと,つまりトランザクション処理は終わるか始まらないかの2択でしかなく,中途半端に終わらないことを要求しています。仕送りの例で言うと,実家の口座から5万円引かれた段階で処理が中断されてはならないということです。
一貫性というのは,トランザクションが開始時と完了時でデータベースの条件を満たすことを要求しています。仕送りの例で言うと,実家の口座に1万円しか入っていないことや,Aさんの口座にあと5万円入ってしまうと,銀行では扱えなくなってしまうような状況を表しています。
独立性というのは,トランザクション処理の開始時と完了時しか外部からは見えないことを指し,隔離性と呼ばれることもあります。仕送りの例で言うと,外部からは「実家の口座から5万円引かれた状態で,Aさんの口座にはまだ5万円が振り込まれていない」という状況が見えないことを表しています。
永続性というのは,トランザクション処理の結果がずっと変わらずに保持されることを指します。仕送りの例で言うと,処理が完了した後に勝手にAさんの口座から5万円は出ていかないことを表しています。
CAP定理
ACID特性に似たアイディアに,CAP定理というものがあります。CAP定理では,分散処理において満たすことのできる要求が限られているということを示しています。CAPはそれぞれ,一貫性/可用性/分断耐性のことを指しています。
1.Consistency(一貫性)
2.Availability(可用性)
3.Partition-tolerance(分断耐性)
一貫性は正しい最新のデータ(又はエラー)を受けとることができることを指しています。可用性はいつでもアクセスできることを指しています。分断耐性はネットワークが途切れてもシステムが稼働することを指しています。
1.一貫性(C):最新のデータ(エラー)を受け取れる
2.可用性(A):利用可能である
3.分断耐性(P):繋がりが途絶えてもOK
分散システムでは「分断耐性」が必須ですので,CAPの定理によりあと1つの要求を「一貫性」「可用性」から選ぶことになります。それぞれを選んだ具体例が以下のようになります。
●P+C:分散処理システム(ApacheのHBaseなど)
●P+A:DNS(IPアドレスとドメイン名を紐づけるシステム)
実際にWebサービスとして提供する場合には,私たちが利用可能であることが重要ですので,一貫性を犠牲にして「分断耐性」と「可用性」を採用することになります。そこで,BASE特性という考え方の「E」に妥協して一貫性を実現することになります。
BASE特性
BASE特性は,ACID特性とは異なってシステム全体に求められる要件を示したものです。かといって,ACID特性とBASE特性は相反するものかというと全くそうではなく,トランザクション処理に関してACID特性を満たしているシステムは,BASE特性を満たすシステムに含まれるというような関係性をイメージするとよいでしょう。
●Basically Available:利用可能
●Soft-State:状態は外部に依存して変化する
●Eventually Consistent:終わりよければ全て良し
つまり,BASEでは一貫性を妥協してでも満たすために「いつでも使えるという前提の下で」「お互いに指示を出し合って」「最終的な結果に一貫性を持たせる」ようなシステムを目指すべきだと言っているのです。
ひとこと
アルファベットがたくさん出てきて嫌になりますね。それにしても,CAP定理は感覚とのズレがあるように思えます。「一貫性」「可用性」「分断耐性」を全て満たすような分散システムが存在してもいいように思えます。私も実際に定理の証明をたどったわけではないので何とも言えませんが,定理の証明における前提条件を覆すようなパラダイムシフトが起これば,我々の利用するWebサービスも一変するのかもしれません。