Общие вопросы

Что такое YDB?

YDB — это гибкий и быстрый сервис для создания распределённых отказоустойчивых NewSQL баз данных неограниченного масштаба.

Какие возможности предоставляет YDB?

На стороне YDB осуществляется автоматическое масштабирование в соответствии с текущей нагрузкой. Это значит, что не нужно покупать оборудование, вручную конфигурировать его и планировать распределение аппаратных ресурсов. Также, YDB обеспечивает высокую доступность и сохранность данных благодаря синхронной репликации в трех зонах доступности.

Какая модель консистентности используется в YDB?

Для чтения данных YDB использует модель строгой консистентности (непротиворечивости) данных.

Как проектировать первичный ключ?

Чтобы правильно спроектировать первичный ключ:

  • Избегайте ситуаций, когда основная часть нагрузки приходится на один шард таблицы. При равномерной нагрузке проще достигается высокая производительность.
  • Уменьшайте количество шардов, которые могут быть задействованы чтением или записью. Чтобы достичь большей производительности, руководствуйтесь распределением: один запрос — один шард.
  • Избегайте ситуаций, при которых какая-то малая часть БД нагружена существенно больше, чем остальные части БД.

Подробнее читайте в разделе Проектирование схемы.

Как равномерно распределить нагрузку по шардам таблицы?

Чтобы равномерно распределить нагрузку по шардам таблицы и увеличить производительность, можно:

  • Изменить порядок следования компонентов ключа.
  • Использовать хеш от значений ключевых колонок в качестве первичного ключа.
  • Уменьшить количество шардов, задействованных в одном запросе.

Подробнее читайте в разделе Приемы, позволяющие равномерно распределить нагрузку по шардам таблицы.

Можно ли использовать NULL в ключевой колонке?

В YDB все колонки, включая ключевые, могут содержать значение NULL, однако использовать NULL в качестве значений в ключевых колонках не рекомендуется. По стандарту языка SQL (ISO/IEC 9075), значение NULL нельзя сравнивать с другими значениями, вследствие чего использование лаконичных конструкции SQL с простыми операторами сравнения может приводить, например, к тому что, строки, содержащие значение NULL, могут быть пропущены при фильтрации.

Существует ли оптимальный размер строки базы данных?

Для достижения высокой производительности не рекомендуется записывать в БД строки размером более 8 МБ и ключевые колонки размером более 2 КБ.

Как работают вторичные индексы в YDB?

Вторичные индексы в YDB — глобальные, и могут быть неуникальными. Подробнее читайте в разделе Вторичные индексы.

Как осуществляется постраничный вывод?

Для организации постраничного вывода рекомендуется последовательно выбирать данные, отсортированные по первичному ключу, ограничивая количество строк ключевым словом LIMIT. Подробнее читайте в разделе Постраничный вывод.

Как эффективно загружать в YDB большие объёмы данных?

Для увеличения скорости загрузки больших объёмов данных учтите следующие рекомендации:

  • Шардируйте таблицу сразу при её создании, чтобы эффективно использовать пропускную способность системы сразу после начала загрузки данных.
  • Вставляйте сразу несколько строк в рамках одной транзакции, чтобы уменьшить долю накладных расходов самой транзакции
  • В каждой транзакции вставляйте строки из уже отсортированного по первичному ключу набора данных, чтобы минимизировать количество шардов, затрагиваемых транзакцией.
  • Избегайте последовательной записи данных в порядке возрастания или убывания значения первичного ключа, чтобы равномерно распределить нагрузку на все шарды.

Подробнее читайте в разделе Загрузка больших объёмов данных.

Как удалять устаревшие данные?

Для эффективного удаления устаревших данных потребуется создать одну или несколько вспомогательных таблиц. Подробнее читайте в разделе Удаление устаревших данных (TTL).

Есть ли в YDB поддержка ORM-клиентов?

Нет, использование ORM поверх YDB является антипаттерном.