Классические реляционные БД хорошо подходят для сценариев работы, связанных с обработкой транзакций (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