---
metadata:
  - name: generator
    content: Diplodoc Platform v5.50.4
alternate:
  - https://ydb.tech/docs/en/faq/common.md
  - https://ydb.tech/docs/ru/faq/common.md
sourcePath: ru/core/faq/common.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

<!-- source: ru/faq/_includes/common.md -->
# Общие вопросы про YDB

## Что такое YDB? {#what-is-ydb}

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

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

## Какие возможности предоставляет YDB? {#ydb-features}

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

## Какая модель консистентности используется в YDB? {#ydb-consistency}

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

## Как проектировать первичный ключ? {#create-pk}

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

* Необходимо избегать ситуаций, когда основная часть нагрузки приходится на одну [партицию](https://ydb.tech/docs/ru/concepts/datamodel/table.md#partitioning) таблицы. При равномерной нагрузке проще достигается высокая общая производительность.

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

Подробнее читайте в разделе [Выбор первичного ключа](https://ydb.tech/docs/ru/dev/primary-key/index.md).

## Как равномерно распределить нагрузку по партициям таблицы? {#balance-shard-load}

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

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

Подробнее читайте в разделе [Выбор первичного ключа](https://ydb.tech/docs/ru/dev/primary-key/index.md).

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

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

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

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

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

Подробнее существующие ограничения описаны в разделе [Ограничения базы данных](https://ydb.tech/docs/ru/concepts/limits-ydb.md).

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

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

Подробнее читайте в разделе [Вторичные индексы](https://ydb.tech/docs/ru/concepts/query_execution/secondary_indexes.md).

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

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

Подробнее читайте в разделе [Постраничный вывод](https://ydb.tech/docs/ru/dev/paging.md).

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

Для эффективного удаления устаревших данных рекомендуется использовать [TTL](https://ydb.tech/docs/ru/concepts/ttl.md).

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

[Таблетка](https://ydb.tech/docs/ru/concepts/glossary.md#tablet)-лидер записывает данные в [распределенное сетевое хранилище](https://ydb.tech/docs/ru/concepts/glossary.md#distributed-storage), которое сохраняет копии в нескольких дата-центрах. YDB подтверждает пользователю запрос только после успешного сохранения нужного числа копий в нужном числе дата-центров.
<!-- endsource: ru/faq/_includes/common.md -->
