Классические реляционные БД хорошо подходят для сценариев работы, связанных с обработкой транзакций (online transaction processing, OLTP). Они обеспечивают выполнение транзакционных требований ACID, что особенно важно для систем, связанных с финансами или обработкой заказов. Сложности возникают, когда данных становится много, поскольку эти БД плохо масштабируются.

Базы данных NoSQL изначально создавались как распределённые системы. Поэтому они легко масштабируются и обеспечивают высокую доступность данных. Однако это имеет свою цену: требования ACID, в частности целостность и надёжность, в этих БД выполняются не полностью.

Стремление объединить преимущества классических реляционных и NoSQL баз данных привели к созданию нового типа СУБД, который назвали NewSQL или Distributed SQL. Это распределённые реляционные базы данных, которые одновременно обеспечивают строгое выполнение требований ACID и хорошее горизонтальное масштабирование.

К таким БД относится и YDB, которая была разработана компанией Yandex для решения внутренних задач, а с 2019 года стала доступна для внешних пользователей. Она спроектирована с учетом высоких требований к производительности (миллионы запросов в секунду) и объёму данных (сотни петабайт). YDB используется для хранения данных сервисов Yandex Cloud, а также во многих сервисах Yandex (например, Яндекс Go, Яндекс Погода, Яндекс Маркет, Авто.ру, Кинопоиск и других).

YDB обеспечивает:

  • строгую консистентность с возможностью ослабления для увеличения производительности;
  • высокую доступность БД с автоматической обработкой отказов вычислительных узлов и дата-центров;
  • автоматическую репликацию БД;
  • автоматическое партиционирование данных при увеличении их объёма или росте нагрузки.

YDB поддерживает высокопроизводительные распределенные ACID-транзакции, которые могут затрагивать несколько записей из разных таблиц. При этом обеспечивается самый строгий уровень изоляции транзакций — serializable. Если возникает необходимость увеличить производительность БД или уменьшить задержки, можно ослабить уровень изоляции для операций чтения.

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

Для удобной организации хранения таблиц в YDB используется дерево папок (директорий), в которых находятся таблицы и другие сущности БД. По аналогии с обычными файловыми системами в одной директории могут быть несколько поддиректорий и несколько таблиц. Имена у сущностей внутри одной директории должны быть уникальны.

YDB может использоваться в двух режимах: dedicated и serverless.

В dedicated режиме для БД выделяются отдельные хосты. Вы самостоятельно задаете число и класс хостов, параметры хранилища данных и облачных сетей. Иными словами, в этом режиме вы работаете с YDB как с сервисом управляемой БД.

В serverless, или бессерверном, режиме БД разворачивается без создания отдельных хостов. Все необходимые для работы БД ресурсы (вычислительные мощности, хранилище данных, сети) предоставляются сервисом автоматически и так же автоматически масштабируются в зависимости от нагрузки.

Этот режим подходит для небольших проектов, когда отдельный сервер не нужен, или для задач с неравномерной и плохо прогнозируемой нагрузкой. При его использовании вы платите за операции с БД (чтение и запись данных), а также за хранение данных и резервных копий.

Для работы с данными в YDB используется декларативный язык запросов YQL, являющийся диалектом SQL. В бессерверном режиме также доступен Document API — HTTP API, совместимый с Amazon DynamoDB. С его помощью можно выполнять операции над документными таблицами (на уровне приложений для работы с такими таблицами используется формат JSON).

YDB является альтернативой имеющимся решениям в следующих случаях:

  • при использовании NoSQL систем, когда нужна строгая консистентность данных;
  • при использовании NoSQL систем, когда требуется транзакционное изменение данных, хранящихся в разных строках одной или нескольких таблиц;
  • в системах, где нужно обрабатывать и хранить большой объём данных с возможностью бесконечного масштабирования;
  • в системах с незначительной нагрузкой, когда держать для БД отдельный хост нерационально с финансовой точки зрения (в этом случае YDB используется в бессерверном режиме);
  • в системах с плохо предсказуемой или сезонно меняющейся нагрузкой;
  • в системах, где важно распределять нагрузку между инстансами реляционной БД.

Модель и схема данных в YDB, запросы и транзакции

🔗 Модель и схема данных в YDB, запросы и транзакции


📂 YandexCloud | Последнее изменение: 15.08.2024 11:51