- 真野隼記
- 約 1,800 文字
- 3,300 View
Cloudflare連載の2日目です。
はじめに
TIG真野です。発表当初に(そのポテンシャルや将来性が)ヤバいと噂されたCloudflare D1を触ってみた記事です。
Cloudflare D1とは
D1はSQLiteをベースに構築された、CloudflareのドキュメントによるとサーバレスSQLデータベースです。エッジロケーションでRDBが動く、SQLLiteはファイルベースなのでレプリケーションに適正ありありでは? と評判になったことは記憶に新しいです。
そんなD1は、2022年に発表され、この記事が公開される少し前の2024年4月にGA(Generally Available)となりました。
機能はSQLLite互換性のあるD1クライアントAPIが提供されたり、Time Travelというバックアップで30日以内の任意の時点に復元できます。非同期読み取りレプリケーションのサポートも発表されました。
D1の主な制約
2024.5月時点で主な制約は以下です。上限緩和申請のGoogleフォームも設置されていますので、理由があれば緩和可能かもしれません。
- DBのデータサイズ: 10GBまで
- テーブルの列数: 100まで
- ワーカー呼び出しあたりのクエリ数(非バンドル): 1000
- 1ワーカーあたり、クエリが1000回までしか呼べない(呼ぶ必要があるかというのもありますが)
- SQL最大長: 100KBまで
- あんまり長いSQLは書けない
- データ移行などはバルクデータのインポートのAPIがあるのでそちらを使えそう
- テーブルの行サイズ: 1KBまで
- けっこう、、厳しいですね…!!
- クエリあたりの最大バインドパラメータ数: 100
- 例えば、INSERT文で用いるプレスホルダーの数の上限に相当
- 最大列数と整合しているといえばそうですが..
- 例えば、INSERT文で用いるプレスホルダーの数の上限に相当
- SQLクエリの実行時間: 30秒まで
(参考)https://developers.cloudflare.com/d1/platform/limits/
D1はRDBとはいえ、現時点では AWSやGoogle Cloud上で動いている複雑なビジネスロジックを置き換え実行することに適している訳では無さそうです(ロードマップ上はデータ上限を広げていき、エンタープライズのニーズにも対応していくとのことです)。
投入データ作成
D1に登録する対象を、この技術ブログのメタデータにしようと思います。2024年時点ではHexoという静的サイトジェネレータを利用しており、キャッシュとして db.json というファイルが存在しているので、これを元にスキーマ、登録用のINSERT文を作成します。
まずはスキーマ(DDL)です。タグやカテゴリはID切っているのに、著者(author)は正規化していないですが、これはdb.jsonのレイアウトをそのままなぞっているからです。
-- 記事 |
入力データはjqを用いてデータを抽出します。1件ずつ抜粋すると以下のようなデータが入っています。
# post |
これをINSERT文に変換したものを、さきほどのschema.sqlに追記します。
本筋ではないため詳細は割愛しますが、変換作業はプロンプト力が不足していたので、Convert JSON Array to Insert SQLというWebツールを利用して、先ほどのjqコマンドの出力結果をJSON配列に書き換えて生成しました。
データ確認
D1チュートリアルに従いデータを投入します。
npx wrangler d1 execute dev-d1-futuretechblog --local --file=./schema.sql |
postテーブルの件数を確認すると 1089件と、今の記事件数と一致します。
npx wrangler d1 execute dev-d1-futuretechblog --local --command="SELECT count(*) FROM post" |
index.ts の作成
DBの中身を簡単に画面の表示させます。GETパラメータでauthorで絞り込めるようにします。
import renderHtml from "./renderHtml.js"; |
var __defProp = Object.defineProperty; |
開発サーバを起動させて、[b] open a browser でブラウザでアクセスします。
npx wrangler dev |
値が取得できています。
デプロイ
ローカルで動作検証が済んだとして、デプロイします。出力内容はローカル版と特に違いは無いです。
npx wrangler d1 execute dev-d1-futuretechblog --remote --file=./schema.sql |
開発について
DB検索ですが、コンソール上からもSQLを実行できて地味に便利だと思いました。
補完が効かないのと、ワンラインな入力ボックスですが、簡単なデータ調査程度であれば十分使えそうです。
さいごに
Cloudflare D1を使ってみました。
登録データとしてフューチャー技術ブログの情報を投入してみました。
一番大きなテーブルでも4000件弱だったため、性能検証的にはまだイマイチですが、特段検索が遅いと感じなかったので、業務実践できる場所を検討して行こうと思います。
> select count(*) from post_tag |