なんじゃくにっき

プログラミングの話題中心。

Cloudflare D1の使い途を考える

※この記事はD1がベータ版のときに書かれました

Cloudflare 上で動くSQLiteであるCloudflare D1の使い途を考えるコーナー。

制約

そもそもD1ではないSQLiteではローカルのDBに実行するように作られています。

D1では

  • Cloudflare Workers / Cloudflare Pagesから使う
  • apiエンドポイントにクエリを投げる

のどちらかになります。

つまり他の商用RDBMSのようにリモートにTCP通信で直接接続することができないはずです。(httpはTCP上で動いているとかいう突っ込みは却下)

あまり向いてなさそうなもの

上記の直接Cloufflare外からTCP通信できないという制約から、Cloudflare以外の場所から頻繁に通信が発生するサービスを作るのは、パフォーマンス面からは余り向いてないんじゃないかと思います。

またSQLiteは元々シングルスレッドで動作している都合上、書き込みが頻繁なサービスには厳しそうです。

また、現時点でベータ版で”バックエンドが不安定なためローカルにデータのコピーは用意しておいて下さい”と説明がある以上、失うとクリティカルなデータは保持しない方が良いでしょう。

特にお金に直接関わるデータはやめておいたほうが良いでしょう。

じゃあ何に使えばよいのさ?

じゃあ何に使えるのかというところですが、

書き込みが頻繁なサービスには向かないと前節で書きましたが、逆に書き込み(write)があまりなくて、読み込み(read)がほとんどの場合に真価を発揮すると思われます。データベースがCloudflareのエッジにレプリケーションされているので読み込みはスケールします。

思いついた使い途の例としてはCMS(Contents Management System コンテンツ・マネジメント・システム)系かなーといった感じです。

ブログ

例えば個人用ブログ、会社ブログ。書き込みはたまに記事を更新するときとコメント付けるときくらい。

似たような例で会社のWEBサイトなんかにも使えるケースはあるんじゃないかと。

一点物を売るサイト、不動産屋のサイト

データはバッチで一括更新して、サイトでは商品を見せるだけ。

問い合わせ、商品の購入は別サービスに移動して行ってもらうのを想定。

目録閲覧系

蔵書の検索とか。

予約システムとか複雑になってくるとしんどくなってくるかも?

ちょっと変わった使い方?

サービスを公開するをせずにただローカルから使えるクラウドに存在するRDBMSとして使うという使い方も出来るんじゃないかと考えました。

ローカルで動くツールのバックエンドとして使う想定です。

接続はAPIエンドポイントを叩くか、シェルを呼び出してSQLを流し込む(後者でも内部的にはAPI叩いてますが)。

クラウド上にDBが存在することで、バックアップを任せられるし、複数人で使うこともできます。

書き込みがヘビーな用途にはやっぱり向いてない気はします。

余談

wranglerをインストールしたあと、

node_modules/wrangler/wrangler-dist/cli.js

を覗くとCLIからwranglerが何をしているかある程度分かるので詳しく知りたい人にはオススメです。