~/VibeHandbook

Cloudflare

developers.cloudflare.com

D1

Что это такое

D1 — это бессерверная SQL-база данных от Cloudflare, построенная на SQLite. Вы создаёте базу, привязываете её к проекту Workers или Pages и обращаетесь к ней обычным SQL через небольшой JavaScript-API. Нет серверов, размер которых нужно подбирать, и пулов соединений, которыми нужно управлять — Cloudflare берёт на себя хранение, репликацию и масштабирование, а вы платите за прочитанные и записанные строки.

Сильные стороны

  • Настоящий SQL (диалект SQLite) — привычные SELECT, JOIN, транзакции и индексы.
  • Бессерверность: никакого провижининга, никаких лимитов соединений, масштабируется до нуля.
  • Тесная интеграция с Workers и Pages через единую привязку.
  • Репликация для чтения размещает копии рядом с пользователями для чтения с низкой задержкой.
  • Дёшево для типичных нагрузок приложений, с пригодным к использованию бесплатным тарифом.

Компромиссы

  • Семантика SQLite: огромные наборы данных и очень высокая конкурентность записи — не его конёк.
  • Лимиты на размер одной базы означают, что очень большие данные могут потребовать шардинга или R2.
  • Новее, чем Postgres/MySQL, поэтому инструментарий и экосистема всё ещё развиваются.
  • Лучше всего обращаться к ней из edge; использовать её извне Cloudflare менее естественно.

Когда это использовать

Выбирайте D1 для данных приложения в проекте, размещённом на Cloudflare: записи пользователей, контент, настройки, метаданные сессий — всё, что укладывается в реляционную модель и живёт рядом с вашим приложением на Workers или Pages.

Соответствие vibe coding

D1 — хороший вариант по умолчанию, когда агент уже строит на Workers, потому что база данных, схема и запросы живут в одном проекте. Попросите агента хранить миграции в версионируемых файлах .sql и применять их через Wrangler, чтобы схема была воспроизводимой. Привязка делает запрос однострочником внутри обработчика.

# wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "app-db"
database_id = "your-d1-id"
# Create a DB and run a migration
npx wrangler d1 create app-db
npx wrangler d1 execute app-db --file=./schema.sql