間もなくベータ版に入るD1は、CloudflareがクラウドベースのSQLストレージ分野へ進出する最初のステップである。D1はSQLiteの上に構築されており、分散レプリケーションメカニズム、バッチ操作のサポート、組み込みコンピューティング、自動バックアップと冗長化などが追加されている。
Cloudflareによると、D1の目的はCloudflareワーカーとシームレスに統合することである。Cloudflareワーカーでは、Cloudflareエッジインフラストラクチャ横断で動作するサーバレス実行環境が提供される。Cloudflareによるこの発表の価値を理解するための重要なポイントは、SQLを「サーバレス」と組み合わせるところにある。
実際、Cloudflareは、ワーカー向けに多数のサーバレスストレージオプションをすでに提供している。例えば、Durable Objects、KV、R2などである。Durable Objectsは永続ストレージが接続されたアクターのようなオブジェクトである。KVはKey-Valueストアを提供する。R2はダイレクトオブジェクトストレージを提供するS3互換のストレージサービスである。
ただし、これまで、Cloudflareは完全なリレーショナルストレージオプションを提供していなかった。実際、D1より以前は、リレーショナルストレージに対するCloudflareによる唯一のサポートは、リレーショナルデータベースコネクタを介して行われていた。これにより、ワーカーをリレーショナルデータベースに簡単に接続できた。しかし、実際のストレージサービスは含まれていなかった。言い換えると、リレーショナルデータベースは依然としてCloudflareインフラストラクチャ外の顧客のクラウド環境内で実行する必要があった。
したがって、D1はSQLを必要とするアプリケーションの特定領域を満たすものである。その際、デプロイされたMySQLあるいはPostgreSQLをフルに操作することが正当化されるほど複雑になることはない。これに不可欠なのは、リレーショナルストレージのエンジンとしてSQLiteを利用することである。完全なリレーショナルデータベースを実行するために特定のサーバを関与させることはない。
ワーカーそのものはサーバとクライアントとの間で実行され、クライアント向けに構築されたテクノロジーからインスピレーションを得たものであるため、SQLiteはデータベースへの最初のエントリとして最適ように思えました。[...] D1の強みは、開発者エクスペリエンスです。何もない状態からフルスタックアプリケーションに瞬時に移行できるようになります。
これを実現するために、CloudflareはSQLiteボックスの周りに複製メカニズムを構築した。これは、Cloudflare Edgeインフラストラクチャを使って、ユーザの近くにデータベースの読み取り専用クローンを作成し、変更が発生したときにすべてのクローンに同期されることを保証する。
Cloudflareは、このレプリケーションメカニズムがどのように機能するかについて、まだ詳細を発表していない。Cloudflareのエンジニアgreg-mは、Hacker Newsで、リードレプリカを使った場合、D1はそのままでは強力な一貫性は提供されないと指摘した。そのため、バックグラウンドプロセスがすべてのレプリカが最終的に同期されることを保証する役割となるであろう。
比較すると、SQLiteを使用するオープンソースの分散リレーショナルデータベースであるrqliteでは、Raftコンセンサスアルゴリズムが使われる。Raftではリーダーを使ってコンセンサスに至る。変更は、Quorumのノードがそれを永続化した場合にのみ認められる。このアプローチのコストはコミット遅延が増加することだが、強力な一貫性が保証される。
D1は、APIを介したバッチ操作もサポートする。それによって、1回のHTTPリクエストでSQLステートメントのリストを実行できるようになる。これは、アトミック操作の構築に役立つ。R2への自動スナップショットとDurable Objectsを活用した冗長性もサポートされる。
D1のもう1つの興味深い機能は、組み込みコンピューティングである。これにより、ユーザに近い特定のワーカーが受信した特定の要求を、プライマリD1インスタンスに関連付けられた別のワーカーに渡して操作を完了することができる。
Cloudflare D1では、データベースを作成・管理するためのWebベースのUIと、Wrangler 2を使ったCLIファーストの選択肢が提供される。