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