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

    Что такое YDB?

    YDB — это распределенная отказоустойчивая Distributed SQL СУБД. YDB обеспечивает высокую доступность и масштабируемость, и, в то же время, строгую консистентность и поддержку ACID-транзакций. Для запросов используется диалект SQL (YQL).

    YDB — это полностью управляемая база данных, для создания инстанса базы данных используется сервис управления базами данных YDB.

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

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

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

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

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

    Чтобы правильно спроектировать первичный ключ, стоит придерживаться следующих правил:

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

      Как следствие этого правила, не стоит в качестве первичного ключа таблицы использовать монотонно возрастающую последовательность, например, timestamp.

    • Чем меньше партиций таблиц будет задействовано во время исполнения запроса, тем быстрее он будет исполнен. Чтобы достичь большей производительности стоит руководствоваться правилом: один запрос — одна партиция.

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

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

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

    Для равномерного распределения нагрузки по партициям таблиц и увеличения общей производительности БД, можно использовать следующие техники:

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

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

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

    В YDB все колонки, включая ключевые, могут содержать значение NULL, однако использовать NULL в качестве значений в ключевых колонках не рекомендуется.

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

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

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

    Подробнее существующие ограничения описаны в разделе Ограничения базы данных.

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

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

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

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

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

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

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

    Для эффективного удаления устаревших данных рекомендуется использовать TTL.

    Как происходит синхронизация данных между дата-центрами в геораспределенных кластерах

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