お問い合わせ

ブログ

これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。

[laravel]マイグレーションでパーティションを切る方法

[laravel]マイグレーションでパーティションを切る方法

こんにちは 今月(2022/05)から入社した新人の守山と申します。 これからサーバーサイドのエンジニアとして頑張っていきます!

早速本題ですが laravelでマイグレーションを使ってパーティションを設定するときに なかなかうまくいかなかったので記録しておきます

前提知識

laravelにパーティションを設定するメソッドがない

解決策

SQLをベタ書きする

想定

logsテーブルのcreated_atにパーティションの設定をします。 ログのデータは膨大になるので処理に時間がかかるので データの箱に区切りをつけて細かく処理ができるようになります。

ソース

# partitonを設定するカラムは主キーの設定が必要

public function up()
    {
        Schema::create('log', function (Blueprint $table) {
            $table->unsignedBigInteger('id')->comment('ID');
            $table->unsignedInteger('user_id')->default(0)->comment('ユーザID');
            $table->datetime('created_at')->nullable(false)->default(DB::raw('CURRENT_TIMESTAMP'))->comment('作成日時');
            $table->index(['user_id', 'created_at']);
            $table->primary(['id','user_id', 'created_at']);
        });

# PARTITION BY RANGE COLUMNS(`カラム名`)とすることでdatetime型を扱えるようになる。PARTITION BY RANGEとの違いに気をつけよう

        DB::statement("ALTER TABLE l_login PARTITION BY RANGE COLUMNS(`created_at`)(
             PARTITION p202112 VALUES LESS THAN ('2022-01-01 00:00:00'),
             PARTITION p202201 VALUES LESS THAN ('2022-02-01 00:00:00'),
             PARTITION p202202 VALUES LESS THAN ('2022-03-01 00:00:00'),
             PARTITION p202203 VALUES LESS THAN ('2022-04-01 00:00:00'),
             PARTITION p202204 VALUES LESS THAN ('2022-05-01 00:00:00'),
             PARTITION p202205 VALUES LESS THAN ('2022-06-01 00:00:00'),
             PARTITION p202206 VALUES LESS THAN ('2022-07-01 00:00:00'),
             PARTITION p202207 VALUES LESS THAN ('2022-08-01 00:00:00'),
             PARTITION p202208 VALUES LESS THAN ('2022-09-01 00:00:00'),
             PARTITION p202209 VALUES LESS THAN ('2022-10-01 00:00:00'),
             PARTITION p202210 VALUES LESS THAN ('2022-11-01 00:00:00'),
             PARTITION p202211 VALUES LESS THAN ('2022-12-01 00:00:00'),

             PARTITION pmax VALUES LESS THAN (MAXVALUE)
        );");
[laravel]マイグレーションでパーティションを切る方法 2022-05-16 17:40:11

コメントはありません。

4266

お気軽に
お問い合わせください。

お問い合わせ
gomibako@aska-ltd.jp