Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-03-20

DBICでマスターとスレーブの振り分けをやるのはどこでやる?

| 02:48 |  DBICでマスターとスレーブの振り分けをやるのはどこでやる? - dann@catalyst を含むブックマーク はてなブックマーク -  DBICでマスターとスレーブの振り分けをやるのはどこでやる? - dann@catalyst  DBICでマスターとスレーブの振り分けをやるのはどこでやる? - dann@catalyst のブックマークコメント

どこのレイヤでやるのが美しいんだろうかと思っていた。Readをスレーブに、Writeをマスターに振り分けるのであれば、どうもStorage::DBIでやるのが綺麗なように見える。

CPANを探してみると、Storage::DBI::Replicationというモジュールがあった。ざっとコードをみた感じでは、WriteはMasterに、ReadはSlaveにということだけしかやってないみたい。

ただ、これだと、レプリケーションのタイムラグがあった場合、WRITE直後のREADは失敗するから現実的には使えないんじゃないかと思った。レプリケーションが同期ってのも現実的じゃないから、こういうのはどこでハンドリングするべきなんだろうなぁというのが疑問。

Masterが1台であれば、Storage::DBIレベルで頑張るのがいいんじゃないかなぁという気がするのだけれど、どうなんだろう。マスター分割が必要になると、Storage::DBIレベルでは吸収できなそうだから、結局アプリケーションレベルでMasterとSlaveの振り分けが必要になってくるのかも、と思うとそもそもDBのスケールを考えるようなレベルのアプリケーションを作る場合には、Storage::DBIのレイヤでやるっていうのもあんまよくないのかな。

この辺の情報は、あまり世間にはでていないような気がするなぁ。綺麗に解決する解というのはないものかなぁと。

# id:hidedenに色々と教えてもらって、*現実解*は大体どういうものかは分かって、実装のイメージも大体できたんだけれど。hideden++

トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080320