新規投稿のお知らせを受信されたい方は、サブスクリプションをご登録ください:

UPDATE Supercloud SET status = 'open alpha' WHERE product = 'D1';

2022-11-16

4分で読了
この投稿はEnglishEspañol简体中文でも表示されます。

2022年5月、当社はデータベースの簡素化(データベースの構築、保守、統合)を追求することを発表しました。当社の目標は、最先端のパフォーマンスを備えた強力でスケーラブルなデータベースを、いかなる煩わしさもなく、実行できるようにするツールをお客様に提供することです。そして、当社は最初に、データベースの専門家だけでなく、あらゆるタイプのユーザーのデータベース開発経験を再考することを目指しました。

UPDATE Supercloud SET status = 'open alpha' WHERE product = 'D1';

この数カ月間、それだけを作成するために取り組み、一方その過程でいくつかの非常に重要な教訓を学びました。Workers上でグローバルなリレーショナルデータベース製品を構築することは、開発者プラットフォームの境界を絶対的な限界まで押し上げ、しばしばそれを超えますが、Cloudflare の私たちにとっては非常にスリリングな方法であるということが分かりました。当社の進歩は、外部からは遅いように見えるかもしれません。しかし、すべての改善、バグ修正またはストレステストは、_すべての_お客様が、世界で最も意欲的なサーバーレスアプリケーションを構築するための道筋を築くのに役立つということです。

しかし、D1の生産準備をするまでの道のりは続き、まだ_完全には_完成していませんが、まずフィードバックを求めて立ち止まらなければ、それは「Cloudflare流」とは言えません。Developer Weekの精神において、D1 Open Alphaを導入するのにこれ以上の好機はありません

「Open Alpha」は、私たちにとって新しい概念です。Cloudflareの様々な発表で「オープンベータ」という言葉を耳にすると思いますが、ここの多くの製品にも言えることですが、D1には全く適していませんでした。まだアクティブな開発とテストの段階にある極めて重要な部分がまだいくつかあるため、実際のアプリの構築を開始できるように、完全に形成されたD1をパブリックベータ版としてリリースする前に、趣味のアプリやサイドプロジェクトで製品の感触をつかむことができるようにしたいと考えています。

Alphaには何が含まれているのですか?

D1の舞台裏ではまだ多くのことが変化していますが、開発者としてのあなたがデータベースを初めて使う場合であっても、D1とのかかわり方について多くのことを考慮してきました。

D1ダッシュボードの使用

数回クリックするだけで簡単に、ダッシュボード内からD1データベースを立ち上げ、実行することができます。D1インターフェースでは、自由にデータを作成、維持、表示できます。UIで行われた変更は、すぐにWorkerで利用できますー再デプロイは必要ありません!

Wranglerを使う

もし少しやってみたいという関心があるのでしたら、Wrangler CLIを使用してデータベースを操作することもできます。データベースを作成し、手動でデータの追加を開始するか、次の2つの方法のいずれかでデータベースをブートストラップします。

1. SQLファイルを実行する

あなたの .sql ファイルは次のようになります。

$ wrangler d1 execute my-database-name --file ./customers.sql

customers.sql

2. マイグレーションの作成と実行

DROP TABLE IF EXISTS Customers;
CREATE TABLE Customers (CustomerID INT, CompanyName TEXT, ContactName TEXT, PRIMARY KEY (`CustomerID`));
INSERT INTO Customers (CustomerID, CompanyName, ContactName) 
VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'),(4, 'Around the Horn', 'Thomas Hardy'),(11, 'Bs Beverages', 'Victoria Ashworth'),(13, 'Bs Beverages', 'Random Name');

マイグレーションは、データベースの変更をバージョン管理するための方法です。D1 では、マイグレーションを作成し、それをデータベースに適用することができます。

マイグレーションを作成するために、以下を実行します。

これで、 migrations フォルダにSQLファイルが作成され、そこにクエリを追加できるようになります。その後、以下を実行することでデータベースにマイグレーションを適用します。

wrangler d1 migrations create <my-database-name> <short description of migration>

Worker内からD1へアクセスする

wrangler d1 migrations apply <my-database-name>

wrangler.toml 設定ファイルにD1バインディングを追加することで、WorkerにD1をアタッチできます。次に、Worker内で以下のようにクエリを実行することで、D1とやりとりできます。

または、Pages FunctionからD1へアクセスする

export default {
 async fetch(request, env) {
   const { pathname } = new URL(request.url);

   if (pathname === "/api/beverages") {
     const { results } = await env.DB.prepare(
       "SELECT * FROM Customers WHERE CompanyName = ?"
     )
       .bind("Bs Beverages")
       .all();
     return Response.json(results);
   }

   return new Response("Call /api/beverages to see Bs Beverages customers");
 },
};

今回のアルファ版では、D1はCloudflare Pagesとの統合もサポートしています。Pagesダッシュボード内にD1バインディングを追加し、Pages Function内にクエリを記述して、フルスタックアプリケーションを構築することができます。PagesとD1を始めるには、完全なドキュメントをチェックしてみてください。

コミュニティが構築したツール

プライベートアルファ版の期間中、D1にある熱狂は、コミュニティのメンバーによるD1エコシステムと開発者エクスペリエンスへの貴重な貢献へとつながりました。これまでのプロジェクトの中から、特にお気に入りのものを以下にご紹介します。

d1-orm

ORM(オブジェクトリレーショナルマッピング)とは、JavaScriptを使ってデータを問い合わせ・処理する方法です。Cloudflare Discord Community Championによって作成されたd1-orm は、D1使用時に厳密な型付け体験を提供することを目的としています。

完全なドキュメントをご覧いただき、 GitHubリポジトリで問題を作成してフィードバックを提供することができます。

const users = new Model(
    // table name, primary keys, indexes etc
    tableDefinition,
    // column types, default values, nullable etc
    columnDefinitions
)

// TS helper for typed queries
type User = Infer<type of users>;

// ORM-style query builder
const user = await users.First({
    where: {
        id: 1,
    },
});

workers-qb

これはゼロ依存性のクエリビルダで、従来のORMよりも生のクエリを使用する利点と速度を維持しながら、シンプルな標準化されたインタフェースを提供します。ORMのような機能を提供することは意図していませんが、workers-qb により、コードからSQLに直接アクセスすることでデータベースとのやりとりを容易にします。

クエリビルダの詳細については、こちらをご覧ください。

const qb = new D1QB(env.DB)

const fetched = await qb.fetchOne({
  tableName: 'employees',
  fields: 'count(*) as count',
  where: {
    conditions: 'department = ?1',
    params: ['HQ'],
  },
})

d1-console

データベースを操作するたび、ターミナルで wrangler d1 execute コマンドを実行する代わりに、d1-console 内で D1を操作することができます。Discord Community Championによって作成されたもので、複数行のクエリの実行、コマンド履歴の取得、きれいにフォーマットされたテーブル出力の表示などの利点があります。

これは現在コミュニティプロジェクトですが、将来的には「D1 Console」をネイティブにサポートする予定です。今現在は、こちらから d1-console パッケージをチェックして始めてみてください。

用D1アダプター

Kyselyは、型安全性があり、自動補完に適したTypeScriptのSQLクエリビルダです。このアダプターを使うと、使い慣れたKyselyのインターフェースでD1とやりとりできます。

こちらからプロジェクトをチェックしてください。

// Create Kysely instance with kysely-d1
const db = new Kysely<Database>({ 
  dialect: new D1Dialect({ database: env.DB })
});
    
// Read row from D1 table
const result = await db
  .selectFrom('kv')
  .selectAll()
  .where('key', '=', key)
  .executeTakeFirst();

まだテスト段階のものは?

このAlphaリリースで無効にされた最大のものは、レプリケーションとJavaScriptトランザクションのサポートです。これらの変更は徐々に展開していきますが、現在、存在するいくつかの制限(積極的にテストに取り組んでいる)について呼びかけたいと思います:

●     **データベースの場所:**各D1データベースは、単一のインスタンスのみ実行します。これは、開発者であるあなたがデータベースを作成する場所の近くで作成され、現在アクセスパターンに基づいて地域を移動することはありません。世界各地で実行しているWorkersは、結果として遅延がより高くなります。

●     **並行処理制限:**高負荷時には、読み取りや書き込みクエリは、新しいレプリカの作成をトリガーするのではなく、キューに入れられることがあります。その結果、Open Alpha のパフォーマンスとスループットの特性は、最終製品を代表するものではなくなります。

●     **可用性の制限:**バックアップの実行中は、DBへのアクセスをブロックします。ほとんどの場合、これは1〜2秒程度であり、バックアップ中に到着したリクエストはキューに入れられます。

また、D1 Alpha Limitationsで、より詳細な最新リストを確認することができます。

フィードバックのリクエスト

D1をご利用になりたいデータベースの種類で、当社はあらゆる種類の推測や手だてを行うことができますが、当社はユーザーではないのです–ユーザーはお客様です私たちは、あらゆる立場の開発者に、初期段階のD1技術を試してもらい、あなたの製品アプリに適したものにするために、改善点を教えてもらいたいと考えています。

体験に関する一般的なフィードバックや、Alphaの他の人々と交流するには、Cloudflare Developers Discord#d1-open-alphaチャンネルに参加してください。重要なお知らせや変更は、このチャンネルや毎月のコミュニティコールで行う予定です。

より具体的な機能要望(どんなに奇抜なものでも)やバグの報告は、CloudflareコミュニティフォーラムのD1カテゴリーにスレッドを作成してください。このフォーラムは、数ヶ月先のプランを立てるための手段として維持していく予定です。

追伸:募集中です。

ご興味を持たれましたか?もしあなたが、未知の問題を解決し、スケールの大きなパワフルな製品を作るのがお好きでしたら、D1チームは採用中です。募集中の職種をぜひご覧ください。

Cloudflareは企業ネットワーク全体を保護し、お客様がインターネット規模のアプリケーションを効率的に構築し、あらゆるWebサイトやインターネットアプリケーションを高速化し、DDoS攻撃を退けハッカーの侵入を防ぎゼロトラスト導入を推進できるようお手伝いしています。

ご使用のデバイスから1.1.1.1 にアクセスし、インターネットを高速化し安全性を高めるCloudflareの無料アプリをご利用ください。

より良いインターネットの構築支援という当社の使命について、詳しくはこちらをご覧ください。新たなキャリアの方向性を模索中の方は、当社の求人情報をご覧ください。
Developer WeekCloudflare WorkersDatabase開発者SupercloudD1Developer Platform

Xでフォロー

Nevi Shah|@nevikashah
Glen Maddern|@glenmaddern
Sven Sauleau|@svensauleau
Cloudflare|@cloudflare

関連ブログ投稿