Cloudflare D1で大量データ作成/更新系を行う方法をいくつか考えてみました。
CLIから実行
1つ目はSQLを生成してCLIから実行する方法。 (結局CLIの実装はAPIを叩いていますが)
npx wrangler d1 execute hogehoge_database --file=./bulk_insert.sql
みたいにして.sqlファイルに書いたSQLを実行する方法ですね。
利点:
- D1のセットアップが済んでいればファイルにSQL書けば良いだけなので楽ですね。
欠点:
初期データの投入みたいな条件分岐など必要のない決まったデータを投入するケースはこれで良さそうです。
Workers使う方法
次はWorkerのエンドポイントを用意しておいて、認証をかけてそこから実行する方法。
利点:
- サービスのWorkerとロジックをある程度共用出来る点。
- DrizzleなどのORMを利用できる点。
- UIほしければPages/Workersで作ってしまえる。
欠点
- Workersの実行時間制限があること。大量実行だとタイムアウトしてしまいそう。
- 言語はJavaScript/TypeScrypt固定。
APIを使う方法
https://developers.cloudflare.com/api/operations/cloudflare-d1-query-database
最後にD1のqueryエンドポイントにSQLを投げる方法。
利点
- エンドポイントを叩くだけなので実装言語は自由
- 分岐などもプログラミング言語で書けば良い
欠点
- 生SQLを書かないといけない(複雑な場合はクエリビルダを何か使えば良いと思うが)
クエリ分割しよう
いずれのやり方にしても一度に大量にデータを作成しようとすると、クエリがタイムアウトする可能性があるので、
適当な件数毎に区切って分割して作成/更新すると良いと思います。