← Cloudflare D1 / d1 / reference
Часто задаваемые вопросы
Цены
Останется ли у D1 тариф Free навсегда?
Да, план Workers Free всегда будет включать возможность бесплатно прототипировать и экспериментировать с D1.
Что произойдет, если превышены дневные лимиты на чтение и запись или общий лимит хранилища на тарифе Free?
Когда аккаунт достигает дневных лимитов на чтение и (или) запись, выполнять запросы к D1 становится невозможно. D1 API возвращает клиенту ошибки о превышении дневных лимитов. После достижения лимита включенного хранилища необходимо удалить неиспользуемые базы данных или очистить устаревшие данные, прежде чем добавлять новые данные, создавать или изменять таблицы либо создавать индексы и триггеры.
Переход на платный план Workers снимает эти ограничения, как правило, в течение нескольких минут.
Что произойдет, если превышены включенные в месяц лимиты чтения, записи и (или) хранилища на платном тарифе?
Дополнительные операции чтения, записи и хранение данных оплачиваются согласно метрики тарификации D1.
Как оценить будущий счет?
Каждый запрос возвращает meta объект, содержащий общее количество прочитанных строк (rows_read) и записанных строк (rows_written) этим запросом. Например, запрос, который выполняет полное сканирование таблицы (например, SELECT * FROM users) из таблицы с 5000 строками вернёт rows_read значение 5000:
"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}Они также включены в D1 Панель управления Cloudflare ↗ и Аналитическое API, что позволяет соотносить объёмы чтения и записи с конкретными базами данных, периодами времени или и тем и другим.
Взимает ли D1 плату за передачу данных / исходящий трафик?
Нет.
Взимает ли D1 дополнительную плату за дополнительные вычислительные ресурсы?
Сам D1 не взимает плату за дополнительные вычисления. Workers, которые выполняют запросы к D1 и обрабатывают результаты, например сериализуют результаты в JSON или выполняют запросы, тарифицируются за Тарифы Workers, в дополнение к использованию, специфичному для D1.
Учитываются ли как платное использование запросы, которые я выполняю из панели управления или Wrangler (CLI)?
Да, любые запросы к базе данных, включая вставку (INSERT) существующих данных в новую базу данных, сканирование таблиц (SELECT * FROM table), или создание индексов учитывается как чтение или запись.
Можно ли использовать индекс, чтобы уменьшить количество строк, читаемых запросом?
Да, вы можете использовать индекс, чтобы сократить количество строк, считываемых запросом. Создание индексов для наиболее часто запрашиваемых таблиц и фильтруемых столбцов сокращает объём сканируемых данных и одновременно повышает производительность запросов. Если у вас нагрузка с преобладанием чтения (самый распространённый случай), это особенно полезно. Запись в столбцы, на которые ссылается индекс, добавляет как минимум одну (1) дополнительную записанную строку из за обновления индекса, но это обычно компенсируется сокращением количества прочитанных строк благодаря преимуществам индекса.
Учитывается ли в объёме моего хранилища только что созданная база данных и/или пустая таблица без строк?
Да, но по минимуму. Пустая таблица занимает не менее нескольких килобайт, в зависимости от количества столбцов (ширины таблицы). Пустая база данных занимает примерно 12 КБ места.
Лимиты
Какую нагрузку способна выдержать база данных D1?
D1 предназначен для горизонтального масштабирования за счёт множества небольших (10 ГБ) баз данных, например баз данных на пользователя, на арендатора или на отдельную сущность. D1 позволяет создавать приложения с тысячами баз данных без дополнительных затрат, поскольку цена определяется только затратами на запросы и хранилище.
Хранилище
Каждая база данных D1 может хранить до 10 ГБ данных.
Параллелизм и пропускная способность
Каждая отдельная база данных D1 по своей природе однопоточная и обрабатывает запросы по одному.
Максимальная пропускная способность напрямую зависит от длительности ваших запросов.
- Если средний запрос выполняется за 1 мс, можно выполнять примерно 1,000 запросов в секунду.
- Если средний запрос выполняется за 100 мс, можно выполнять 10 запросов в секунду.
Если база данных получает слишком много одновременных запросов, она сначала пытается поставить их в очередь. Если очередь переполняется, база данных возвращает ошибка "overloaded".
В основе каждой отдельной базы данных D1 лежит один Durable Object. При использовании Репликация для чтения D1 ↗ каждый экземпляр реплики представляет собой отдельный Durable Object, и эти рекомендации применяются к каждому экземпляру реплики независимо.
Производительность запросов
Производительность запросов служит важнейшим фактором, определяющим пропускную способность. Ниже приведён примерный ориентир:
- Запросы на чтение, такие как
SELECT name FROM users WHERE id = ?с подходящим индексом поidзаймёт менее одной миллисекунды по времени выполнения SQL. - Запросы на запись вроде
INSERTилиUPDATEмогут занимать несколько миллисекунд по времени выполнения SQL и зависят от количества записанных строк. Запись должна надёжно сохраняться в нескольких местах, подробнее см. на как D1 хранит данные под капотом ↗. - Миграции данных, такие как масштабная
UPDATEилиDELETEзатрагивающие миллионы строк, необходимо выполнять пакетами. Один запрос, который пытается изменить сотни тысяч строк или сотни МБ данных за раз, превысит лимиты выполнения. Разбейте работу на более мелкие части (например, обрабатывайте по 1 000 строк за раз), чтобы уложиться в лимиты платформы.
Чтобы запросы выполнялись быстро и эффективно, используйте подходящие индексы в вашей SQL-схеме.
CPU и память
Операции с базой данных D1, включая выполнение запросов и сериализацию результатов, выполняются в Ограничения CPU и памяти платформы Workers.
Превышение этих лимитов или достижение других лимитов платформы приведёт к ошибкам. См. список ошибок D1 с дополнительными подробностями.
Сколько одновременных подключений к D1 может открыть Worker?
Для каждого вызова Worker можно открыть одновременно до шести подключений (к D1).
Дополнительную информацию об одновременных соединениях Worker см. в Одновременные открытые соединения.