姫ヒャクを支える技術(MySQL編)

tech kayac

Apr 11th, 2014

Profile

songmu

Recent CPAN Modules

MySQLの話をします

ゆるふわアグレッシブ運用

AGENDA

テーブル設計

正規化

リレーションについて

外部キー制約

データ型について

https://dev.mysql.com/doc/refman/5.6/en/storage-requirements.html

方針

767byte問題

ユニークキー制約をかける場合、そのフィールド長に上限が767byteになっている。 VARCHARにユニークキー制約をかける場合等に注意が必要

逆にVARCHARのフィールドサイズはこれ決め打ちで良い。 (複合ユニークキーの場合もあるけど…)

データ量に関するバッドノウハウ

以下の様なことは超絶大規模でもない限りやらないでいい。

user.idはBIGINTにするかどうか問題

別にINTEGERで良くて基本的に男気の問題でしかない。パズドラでさえ3000万

ただ、それ以外のテーブルはBIGINTにしておいたほうが良い。

userに対して1対1のテーブル

ドメインに因って、userデータを分割する

こういうテーブルは、user_idがpkで良いと最近思い始めてきた。ただ、user_idだけに限ったほうが良いと思う

INDEXの張り方

データ量を抑える工夫

論理削除を使わない

パーティションを活用する

姫ヒャクのテーブル構成

154テーブル

TO_DAYS('2014-01-01')とかやらない

5.1以前
ALTER TABLE PARTITION BY RANGE (TO_DAYS(created_at)) ( pname VALUES LESS THAN TO_DAYS('2014-04-01') )

5.5以降
ALTER TABLE PARTITION BY RANGE COLUMNS (created_at) ( pname VALUES LESS THAN '2014-04-01' )

カジュアルにINSERTする

パーティションの注意点