DB分割とか

大きい開発がはじまったので、
作りためた自作フレームワークを完成させよう~

と思ったんだけど、肝心のDB分割の部分がうまく整理できていないので、
そこらへんのメモ。

キーで分割するか、テーブルで分割するか

○テーブル分割
・IDテーブルはこのDBサーバ、blogテーブルはこのサーバみたいな。
 さらに細かくblogテーブルのこのカラムはこのサーバみたいなやり方もあり。

・パーティション・マップを用意してテーブル<>サーバのマッピングをする。

・色々JOINとかが超めんどい
(そもそもその規模だとJOIN使うな的な話も多い)

・分割するなら例えばBlogテーブルのテキストカラムだけ
外だしするとかクエリベースで切り貼りするイメージ。

・シームレスなラッパーは書くのがきつそう

○キーで分割
・単純にID1~100はこのサーバ 200~300はこのサーバみたいな。

・キーの決め方がハードコーディングになると汎用性がさがるけどリソースをうまく使いきれそう

・キーの決め方がアルゴリかましてるとID100を別サーバに移動みたいなことがきつい。
 だけどサーバ増設が伴っても比較的ラクに対応できそう。

・マッピングを使う どっかにID1はこのサーバって書いてく。
 このマッピングが書いてあるDBの負荷は大丈夫なん?

・シームレスなラッパーは書くのが楽そう

○タイムスタンプベース
・そこまで必要なサイトってDbいくつ必要なんだというw

—-

テーブルで分割の場合よりも、キーで分割のほうが
サーバの拡張のイメージが付きやすいし、管理コストも楽そうだから
こっちを採用予定。

とりあえずログインサーバとメインDB1,メインDB2でわけようかな。
キーで分割して、マッピング使用、ログインサーバでマッピングさせてしまう予定
(ログインサーバの負荷がきになるけど)

あ あと自作フレームワークは neo という名前に!
(そういうとこだけ早いというw

参考サイト
http://www.itmedia.co.jp/enterprise/articles/0808/28/news013_1.html
http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/

Leave a Reply