2010年7月8日木曜日

ルイーダの酒場で学ぶOracle、HBase、Cassandraの違い

ルイーダの店 = データベース
旅人 = データ
勇者 = クライアント(APサーバなど)

■ルイーダの酒場 Oracleバージョン
世界に一店舗だけある巨大な酒場。
世界中から旅人が集まり、転職歴や力、素早さ、運の良さ、レベル、倒してきた敵等、その旅人が持つあらゆる情報で探し出す事が出来る。
仲間を捜す時は、ほしい仲間の条件を店主に言えば、条件に見合う旅人を連れてきてくれる。基本的に店主はどんなに複雑で難しい条件でも健気に探し出してきてくれる。
がしかし、店主自らが探しに行く為、あまりに条件が複雑過ぎると探すのに時間がかかってしまうので、運悪く自分よりも前の勇者が店主に複雑な条件を提示してしまうと、窓口に長蛇の列が出来てしまい待たされる事もある。

■ルイーダの酒場 HBaseバージョン
とある街に本社を置き、世界中に支店を持つ酒場である。
旅人がここの酒場に登録する際にID作る必要がある。ほとんどの場合自分が探してもらいやすい様に力や素早さなど自分のステータスを羅列した登録番号を作る事が多い。
また旅人を捜す時は基本的にその旅人の登録番号を指定するか、登録番号の範囲を指定する事でしか探し出すことができない。自分がほしい旅人の条件に見合っているかは、一度呼び出してもらってから自分で確かめる必要がある。
各支店には所属すべき登録番号の範囲が決められている為、登録した旅人達は自分登録番号に従い、自分が待機しているべき支店に移動して待機する事になる。本社は常に各支店にいる旅人達の数を把握しており、各支店がほぼ同じ人数の旅人を抱える様に各支店の担当登録番号の範囲を調整し、各支店に伝えている。
自分が所属すべき支店が変わった旅人達、あるいは所属している支店が魔物に襲われて破壊されてしまった場合は、その足で新しい所属支店へと移動する必要がある。
その為に例えば新しい所属支店において、勇者がとある旅人を指名したとしてもその旅人が新しい支店にたどり着かない限り、その勇者は酒場で待ち続けなければならない。(可用性の犠牲)
旅人を捜す窓口は各お店に一つしかないが、お店がたくさんある上、登録番号毎に分かれている為、同時に何人もの勇者が、旅人を捜す事が出来る。

■ルイーダの酒場 Cassandraバージョン
世界中に支店を持つが、本社を持っていない。その為に書く支店間で常に連絡を取り情報共有を行っている。
こちらも旅人は登録する際に登録番号を生成し所属する支店を決める。が、それに加えて登録が終わると即座にその人のクローンを二人ほど作り上げ、本人とは別の店舗に配置しておく。更にこのクローンの作成を定期的に行い、新しいクローンが届いた支店では古いクローンと交換している。
とある旅人を探しに店を訪れた勇者がいたが、その旅人はこの支店ではなく、別の支店にいる事がわかった。が更に運悪くその探している旅人が所属している支店が魔物に破壊されている事がわかった。その様な時はすぐにクローンが所属している支店に移動し、そのクローンをつれてすぐに勇者は旅立つ事が出来る。
が、せっかくレベルアップしたのに複製を作る前に所属支店をなくしてしまった旅人を指名した勇者は、レベルアップ前の状態のクローンをつれて旅立たねばならなくなる。(一貫性の犠牲)
旅人を捜す窓口は各お店に一つしかないが、お店がたくさんあるので、同時に何人もの勇者が、旅人を捜す事が出来る。
コメントを投稿