ブログ
これまでに経験してきたプロジェクトで気になる技術の情報を紹介していきます。
[laravel]マイグレーションでパーティションを切る方法
Shotaro Moriyama
2 years
こんにちは 今月(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]マイグレーションでパーティションを切る方法
[laravel]マイグレーションでパーティションを切る方法
2022-05-16 17:33:21
2022-05-16 17:40:11
コメントはありません。