2005-02-25 22:03:52

はてなのDB運用キター!

テーマ:MySQL
DBMagazine 4月号にて「数十台のMySQLサーバーで月間2億ページビューを支える「はてな」のDB運用の裏側すべて見せます!」として、はてなの伊藤さんの記事が!!

闇プロジェクトをやる上で課題である、システム構成の設計ですごーく勉強になりました!

isiもzoeもインフラとかシステム構成付近にあまり経験がないので、ネットサービスを立ち上げるときサーバどうするよ?というのが大きな問題で、是非ともはてなの構成が知りたかったので今日早速帰りに雑誌購入して帰り道の電車で一生懸命読みました(w

■リバースプロキシによるトラフィック分散
1つのリバースプロキシがリクエストの入り口となって、トラフィック分散して、複数あるwebサーバへリクエストを渡す。
なるほど~。分散の方法はどうしてるんでしょう??ランダムかなぁ。

■mysqlをレプリケーションする
1つのマスタから、複数のレプリカを作る。各々のテーブルは別サーバに置く。
マスタ:更新処理はマスタのみ。
レプリカ:参照のみ。はてなの大半のリクエストは参照。

■ストレージエンジンは?
マスタ:InnoDB
レプリカ:参照なのでMyISAM

■テーブルロックをなるべく回避
書き込みが頻発するテーブルをなるべく作らない
書き込みが頻発するテーブルと結合しないといけないテーブルを作らない

がちがちに正規化しないようにするのでしょうかね。
セッション情報とかを1つのテーブルに格納しないようにして、負荷分散すると。

■テーブルの結合をしない
別サーバの別DBのテーブル同士を1つのsqlで取れない。
いっそのこと2回sqlを投げたほうが速い。

これよりも
select
 b.name
from
 tbl1 a,
 tbl2 b
where
 a.id = '0001'
 and a.key = b.key;


こっちのがイイ
select
 a.key
from
 tbl1 a
where
 a.id = '0001';

select
 b.name
from
 tbl2 b
where
 b.key = [上のa.key];


■レプリカはメモリ上に全データを展開
なんとレプリカのリクエストから参照されるテーブルはすべてメモリに展開するらしいです!すげ~。
で、テーブルメモリに乗らなくなってきたらそのテーブルを分割するのだそう。
う~~。どうやってテーブルを分割するんだろう。分割できるようにテーブル内容を設計するにはどうしたらいいんかなぁ。。年月日でテーブルを分けるのかなぁ。

■オブジェクトは全部DBで管理する
画像、xmlとかをNFSを使わずDBに入れて使用


この他にも色々とほんとに楽しく勉強させて頂きました。
naoyaさん素敵すぎます!
AD
いいね!した人  |  コメント(98)  |  リブログ(0)
2005-01-29 13:59:36

mysqlで、4G以上のテーブルを運用する方法とか

テーマ:MySQL
尊敬するNDO::WeblogさんでMySQLでの巨大テーブルの効率的な運用方法が掲載されていました。

FeedBack」を作られたnaoyaさんのBLOGなのですが、実は昨日そのFeedBackで使用しているテーブルが4Gを超えて不具合を起こしていたらしく、僕としてはどのように復旧したのかを書いていただけたら勉強になるなぁと思っていたので、「まってました!」と叫んでしまった。

とても理解しやすく、実例を上げてご説明いただいてます。

現在naoyaさんは「はてな」に所属されているんです。
「はてな」のインフラ面のテクニックとかご紹介していただけたらなぁとリクエスト(笑

なんでも簡単にサーバを増設できるように設計されているらしいです。どうやってやるんだろ? ものすごい興味あるなぁ。
AD
いいね!した人  |  コメント(11)  |  リブログ(0)
2005-01-25 16:30:09

mysqlのカラム型

テーマ:MySQL
今までoracleしかRDBMSを使ったことが無かったので、
MYSQLのカラム型でちょっと戸惑った。のでメモメモ。

【参考】
マニュアル「6.2 カラム型


整数
整数型:  BIT<TINYINT<SMALLINT<MEDIUMINT<INT<BIGINT
桁数 :  1< -128~127(0~255) < 32768*2 < 8388608*2 < 2147483648*2




日付
・DATE
日付。サポートしている範囲は、'1000-01-01' 〜 '9999-12-31'。
MySQL では、DATE 値は 'YYYY-MM-DD' 形式で表示されるが、
DATE カラムへの値の割り当てには文字列または数値のいずれかを使用することができる。

・DATETIME
日付と時刻の組み合わせ。サポートしている範囲は、'1000-01-01 00:00:00' 〜 '9999-12-31 23:59:59'。
MySQL では、DATETIME 値は 'YYYY-MM-DD HH:MM:SS' 形式で表示されるが、
DATETIME カラムへの値の割り当てには文字列または数値のいずれかを使用することができる。

文字
・[NATIONAL] VARCHAR(M) [BINARY]
可変長文字列。M の範囲は 0 〜 255 文字BINARY キーワードを指定しないと、
VARCHAR 値のソートと比較は、ケース非依存方式で行われる。 See 項6.5.3.1. 「カラムの暗黙的な変更」。
バージョン 4.1.0 以降では、255 より大きい M 値を指定すると、カラム型が TEXT 型に変換される。

・TINYBLOB , TINYTEXT
最大長が 255(2^8 - 1)文字の BLOB 型または TEXT 型のカラム。

・BLOB , TEXT
最大長が 65535(2^16 - 1)文字の BLOB 型または TEXT 型のカラム。

・MEDIUMBLOB , MEDIUMTEXT
最大長が 16777215(2^24 - 1)文字の BLOB 型または TEXT 型のカラム。

・LONGBLOB , LONGTEXT
最大長が 4294967295 または 4G(2^32 - 1)バイトの BLOB 型または TEXT 型のカラム。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。