Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Database
  • Начало работы
    • Обзор
    • Создание базы данных
    • Примеры YQL-запросов
    • Примеры работы с YDB CLI
    • Запуск тестового приложения
    • Использование AWS CLI и AWS SDK
    • Document API
    • Разработка на NodeJS с Document API
  • Пошаговые инструкции
    • Управление базами данных
    • Подключение к базе данных
    • Управление таблицами
    • Чтение и запись данных
    • Работа со вторичными индексами
  • Работа с SDK
  • Концепции
    • Обзор
    • Модель данных и схема
    • Режимы работы Serverless и Dedicated
    • Типы данных
    • Транзакции
    • Вторичные индексы
    • Time to Live (TTL)
    • Термины и определения
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
    • Обзор
    • Бессерверный режим
    • Режим с выделенными инстансами
  • Рекомендации
    • Проектирование схемы
    • Партицирование таблиц
    • Вторичные индексы
    • Постраничный вывод
    • Загрузка больших объемов данных
    • Использование таймаутов
  • YDB API и справочник
    • Ограничения базы данных
    • Обработка ошибок в API
  • HTTP API, совместимый с Amazon DynamoDB
    • Справочник API
      • Все методы
      • Actions
        • BatchGetItem
        • BatchWriteItem
        • CreateTable
        • DeleteItem
        • DeleteTable
        • DescribeTable
        • GetItem
        • ListTables
        • PutItem
        • Query
        • Scan
        • TransactGetItems
        • TransactWriteItems
        • UpdateItem
      • Общие ошибки
  • Справочник YQL
    • Обзор
    • Типы данных
      • Простые
      • Опциональные
      • Контейнеры
      • Специальные
    • Синтаксис
      • Неподдерживаемые конструкции
      • Работа с текстовым представлением типов данных
      • Выражения
      • CREATE TABLE
      • DROP TABLE
      • INSERT INTO
      • UPSERT INTO
      • REPLACE INTO
      • UPDATE
      • DELETE
      • SELECT
      • GROUP BY
      • JOIN
      • FLATTEN
      • ACTION
      • DISCARD
      • PRAGMA
      • DECLARE
      • OVER, PARTITION BY и WINDOW
    • Встроенные функции
      • Базовые
      • Агрегатные
      • Оконные
      • Для работы со списками
      • Для работы со словарями
      • Для работы с JSON
      • Для работы со структурами
      • Для работы с типами
    • Предустановленные пользовательские функции
      • HyperScan
      • Pcre
      • Pire
      • Re2
      • String
      • Unicode
      • Datetime
      • Url
      • Ip
      • Digest
      • Math
      • Histogram
    • Работа с текстовым представлением типов данных
  • Туториал YQL
    • Обзор
    • Создание таблицы
    • Добавление данных в таблицу
    • Выборка данных из всех колонок
    • Выборка данных из определенных колонок
    • Сортировка и фильтрация
    • Агрегирование данных
    • Дополнительные условия выборки
    • Объединение таблиц с помощью JOIN
    • Вставка и модификация данных с помощью REPLACE
    • Вставка и модификация данных с помощью UPSERT
    • Вставка данных с помощью INSERT
    • Обновление данных с помощью UPDATE
    • Удаление данных
    • Добавление и удаление колонок
    • Удаление таблицы
  • Обслуживание
    • Резервное копирование
  • Диагностика
    • Системные таблицы
  • Вопросы и ответы
    • Общие вопросы
    • Ошибки
    • YQL
    • Все вопросы на одной странице
  • Публичные материалы
  1. Вопросы и ответы
  2. Общие вопросы

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

    Что такое YDB?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    • Не стоит вставлять данные отдельными транзакциями для каждой строки. Более эффективно производить вставки по несколько строк (батчами). В этом случае накладные расходы на сам механизм транзакций будут меньше.

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

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

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

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

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

    Language
    Вакансии
    Политика конфиденциальности
    Условия использования
    © 2021 ООО «Яндекс.Облако»