公開日:2019.09.13

MySQLパーティショニング実践編

テクログdb

MySQLパーティショニングの話をします!

基本的なことや導入方法はグーグル先生で検索するといっぱい出てくるのでそちらで。

☆パーティショニングが適切なパターン

そもそも自分が考えるパーティショニングが適切であるパターンは、

・int型のカラムでステータスを判定している(パターン分岐がそれほど多くない)

・一週間毎に生成されるようなデータ

など

つまりあまりパターンが多くなく、indexが効きづらいものですね。

イメージとしては、別テーブルに分けるという選択肢が出てくるものが適切だと思います。

(パーティショニングってそういうことやってる訳ですし)

☆実際に導入した時に気をつけたこと

導入した事例の仕様は

・一週間毎にユーザーに紐づいた計算されたレコードができる(200万くらい)

・そのデータを一週間ごとで参照する

▼レコードを入れる前にパーティショニング

まず、パーティションの導入はテーブルを新規作成するときに行いました。

テストで2ヶ月分、1000万レコード程度が存在する想定の状態でパーティショニングをして見ましたが、

全然終わりませんでしたw

なるべくサービスを止める選択を取りたくなかったため、

事前にパーティショニングされたテーブルにinsertする形になりました

▼PHP側の定期バッチで一週間毎にパーティションを追加

今回の仕様的に定期的なパーティション追加が必要でした。

と言っても簡単なSQLを流すだけです。

▼そもそもパーティションを考えたテーブル構成にする

パーティションの判定をするカラムがuniqueなindexに含まれている必要があります。

とはいえ複合主キーとかに含めるだけでもオッケーです。

逆にここで想定していたカラムが上手くユニークにできない場合、おそらくパーティションするのに向いていないです。

長々と書きましたが、結構導入は簡単です!

パーティションを辞めるときにデータが消えたりもしませんし。

気になる方はやってみましょう!

この記事を書いた人

福神漬け

入社年2017年

出身地チーバくんの目のあたり

業務内容開発やりつつちょっと管理っぽい仕事

特技または趣味ゲームとゲームをしながらゲームをできること

福神漬けの記事一覧へ

テクログに関する記事一覧