はい、Workers Free プラン には、D1 を無料で試作・検証できる機能が常に含まれます。
アカウントが日次の読み取り上限または書き込み上限に達すると、D1 に対してクエリを実行できなくなります。D1 API は、日次上限を超えたことを示すエラーをクライアントに返します。含まれるストレージ上限に達した場合は、新しいデータを挿入したり、テーブルを作成・変更したり、インデックスやトリガーを作成する前に、使っていないデータベースを削除するか、古いデータを整理する必要があります。
Workers Paid プランへアップグレードすると、通常は数分以内にこれらの上限が解除されます。
追加の読み取り、書き込み、ストレージは、D1 の課金指標 に従って課金されます。
すべてのクエリは、そのクエリが読んだ行数(rows_read)と書いた行数(rows_written)の合計を含む meta オブジェクトを返します。たとえば、5000 行のテーブルに対してフルテーブルスキャン(例: SELECT * FROM users)を行うクエリは、rows_read が 5000 になります。
"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}これらの値は D1 の Cloudflare ダッシュボード ↗ と analytics API にも含まれるため、読み取り量と書き込み量を特定のデータベース、期間、またはその両方に紐づけられます。
いいえ。
D1 自体は追加のコンピュートに課金しません。D1 にクエリを実行して結果を計算する Workers(例: 結果を JSON にシリアライズする、クエリを実行する)は、D1 固有の使用量に加えて、Workers の料金 に従って課金されます。
はい。データベースに対して実行したすべてのクエリは、既存データを新しいデータベースへ挿入する(INSERT)、テーブルスキャン(SELECT * FROM table)、インデックスの作成を含め、読み取りまたは書き込みとしてカウントされます。
はい。インデックスを使うと、クエリが読む行数を減らせます。よくクエリするテーブルとフィルター対象の列に インデックスを作成 すると、スキャンするデータ量が減り、同時にクエリ性能も向上します。読み取りが多いワークロード(最も一般的)では、特に有効です。インデックスが参照する列への書き込みは、インデックス更新のため少なくとも 1 行分の追加書き込みが発生します。ただし、インデックスによって読み取り行数が減る効果で、通常は相殺されます。
はい。ただしごくわずかです。空のテーブルでも、列数(テーブル幅)に応じて少なくとも数キロバイトを使います。空のデータベースは約 12 KB のストレージを使います。
D1 は、ユーザー単位、テナント単位、エンティティ単位など、小さめ(10 GB)のデータベースを複数並べて水平にスケールアウトする設計です。 料金はクエリとストレージだけなので、数千のデータベースを追加料金なしで使ってアプリケーションを構築できます。
各 D1 データベースは、最大 10 GB のデータを保存できます。
個々の D1 データベースは本質的に単一スレッドで、クエリを 1 つずつ処理します。
最大スループットは、クエリの所要時間に直結します。
- 平均クエリが 1 ms なら、おおよそ毎秒 1,000 クエリを実行できます。
- 平均クエリが 100 ms なら、毎秒 10 クエリを実行できます。
同時リクエストが多すぎるデータベースは、まずキューに入れようとします。キューが満杯になると、データベースは 「overloaded」エラー を返します。
個々の D1 データベースは、1 つの Durable Object で支えられています。D1 の読み取りレプリケーション ↗ を使う場合、各レプリカインスタンスは別の Durable Object であり、この指針はレプリカインスタンスごとに独立して適用されます。
スループットでもっとも重要なのはクエリ性能です。目安は次のとおりです。
idに適切なインデックスがあるSELECT name FROM users WHERE id = ?のような読み取りクエリは、SQL 実行時間が 1 ミリ秒未満です。INSERTやUPDATEのような書き込みクエリは、SQL 実行時間に数ミリ秒かかることがあり、書き込む行数に依存します。書き込みは複数拠点へ耐久的に永続化する必要があります。詳細は D1 が内部でデータを永続化する方法 ↗ を参照してください。- 数百万行に影響する大きな
UPDATEやDELETEなどのデータ移行は、バッチで実行してください。一度に数十万行や数百 MB のデータを変更しようとする単一クエリは、実行制限を超えます。作業を小さな塊(例: 1 回あたり 1,000 行)に分けて、プラットフォーム制限内に収めてください。
クエリを速く効率よくするには、SQL スキーマに適切なインデックスを付けてください。
クエリ実行や結果のシリアライズを含む D1 データベース上の操作は、Workers プラットフォームの CPU とメモリ制限 の範囲で実行されます。
これらの制限、またはほかのプラットフォーム制限に達すると、エラーが発生します。詳細は D1 のエラー一覧 を参照してください。
Worker の呼び出しごとに、D1 への接続を同時に最大 6 本開けます。
Worker の同時接続の詳細は、同時に開く接続 を参照してください。