LoginSignup
0
0

More than 1 year has passed since last update.

【Laravel / Rails】bulk insertについてまとめ

Posted at

一度に複数のデータを1回のクエリでインサートしたいとき(bulk insert)、insert

PHP/Laravel

クエリビルダのinsertメソッド

DB::table('users')->insert([
    ['email' => 'picard@example.com', 'votes' => 0],
    ['email' => 'janeway@example.com', 'votes' => 0],
]);

先輩エンジニアに聞いたところ、「bulk insertは使うとしたら100万件くらいのデータ量の場合だが極力使わないほうがいい」とのこと。
今回のプロジェクトではデータ量がそこまで大量ではなかったため、bulk insertは結局使わないことにした。
下記記事も参考になった。

ただ、調べるとLaravel8からupsertメソッドが使えるらしい。
今までupdateOrCreateを使用していた場面でupsertを使えば1つのクエリで複数の「アップサート」を実行できるので便利そう。

Ruby/Rails

別プロジェクトで下記のgemを使ってbulk insertしていた。

books_attributes = [
  { title: "Book 1", author: "George Orwell" },
  { title: "Book 2", author: "Bob Jones" }
]
books.import(books_attributes)

Rails6以降はinsert_allメソッドが追加された。

まとめ

bulk insertを使うかどうかは各プロジェクトやエンジニアの考え方によるので、一概に決めつけず柔軟に考えられるようにしたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0