2019.09.13
STAFF BLOG
スタッフブログ
TECHNICAL
テクログ
MySQLパーティショニングの話をします!
基本的なことや導入方法はグーグル先生で検索するといっぱい出てくるのでそちらで。
☆パーティショニングが適切なパターン
そもそも自分が考えるパーティショニングが適切であるパターンは、
・int型のカラムでステータスを判定している(パターン分岐がそれほど多くない)
・一週間毎に生成されるようなデータ
など
つまりあまりパターンが多くなく、indexが効きづらいものですね。
イメージとしては、別テーブルに分けるという選択肢が出てくるものが適切だと思います。
(パーティショニングってそういうことやってる訳ですし)
☆実際に導入した時に気をつけたこと
導入した事例の仕様は
・一週間毎にユーザーに紐づいた計算されたレコードができる(200万くらい)
・そのデータを一週間ごとで参照する
▼レコードを入れる前にパーティショニング
まず、パーティションの導入はテーブルを新規作成するときに行いました。
テストで2ヶ月分、1000万レコード程度が存在する想定の状態でパーティショニングをして見ましたが、
全然終わりませんでしたw
なるべくサービスを止める選択を取りたくなかったため、
事前にパーティショニングされたテーブルにinsertする形になりました
▼PHP側の定期バッチで一週間毎にパーティションを追加
今回の仕様的に定期的なパーティション追加が必要でした。
と言っても簡単なSQLを流すだけです。
▼そもそもパーティションを考えたテーブル構成にする
パーティションの判定をするカラムがuniqueなindexに含まれている必要があります。
とはいえ複合主キーとかに含めるだけでもオッケーです。
逆にここで想定していたカラムが上手くユニークにできない場合、おそらくパーティションするのに向いていないです。
長々と書きましたが、結構導入は簡単です!
パーティションを辞めるときにデータが消えたりもしませんし。
気になる方はやってみましょう!