現在2000万PV/Dayのサイトを運営しておりますが、
いつの間にかレコード数が1億に達するテーブルが存在していることが発覚しました。
さすがにこの件数ともなるとクエリが重くなり、サービスの稼働にも大きく影響しております。
そこで皆様のお知恵をお借りしたいのですが、
1億またはそれ以上のレコード数を保持するテーブルについて
データを複数台サーバに分散化させた場合の
”一元的な横断検索を実用レベルで可能とするアイデア”
をお教え頂けますでしょうか。
現在の環境は以下の通りです。
OS:CentOS5.5
アプリ:PHP5.2.6
ディスク:INTEL SSDSA2CW120G3
メモリ:16GB
MySQLのバージョン:5.0.88と、5.0.67+tritonn.1.0.12(全文検索)
よろしくおねがいいたします。
>MySQLレベルで分散化
結論は難しい。
データの特性や検索パターンを利用して
アプリケーションからのアプローチも必要な場合が多い。
レコードを半分のテーブル作成して2テーブル。
1テーブル目でヒットすれば、今までの半分の時間
2テーブル目でヒットすれば、今迄通りの時間
こういう風な感じの原理を利用するとか。
mixiとかもその手の方法論を導入してたと思いますよ。
>データを複数台サーバに分散化させた場合
これ、更新があるのかどうかとか更新の頻度にもよります。
・よく検索されるパターンの結果を保持しておく
・更新系と参照系の2つもつとか
基本的に、ベタで泥臭い方法しかないと思う。
MySQLレプリケーション環境下での負荷分散手法のまとめ
http://epidemic.jp/2011/06/11/how_to_mysql_loadbalance/
公式マニュアル「レプリケーション」
http://dev.mysql.com/doc/refman/5.1/ja/replication.html
かなり特化したことをやるなら、スキーマや想定されるクエリとかにも依存するでしょうし、情報がこれだけだと答えにくい気がします。