Обзор YDB

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

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

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

Для взаимодействия с YDB доступен YDB CLI, а также SDK для C++, Java, Python, Node.js, PHP и Go.

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

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

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

В дизайн YDB заложена поддержка разных сценариев нагрузки, таких как OLTP и OLAP. В текущей реализации поддержка аналитических запросов ограничена. Поэтому можно говорить, что в данный момент YDB — это OLTP-база данных.

YDB используется в сервисах Яндекса в качестве высокопроизводительной OLTP СУБД. В частности, сервисы Yandex.Cloud Yandex Object Storage использует YDB для хранения данных и базируется на её компонентах.

Сценарии применения

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

  • При использовании NoSQL систем, когда требуется строгая консистентность данных.
  • При использовании NoSQL систем, когда требуется транзакционное изменение данных, хранящихся в разных строках одной или нескольких таблиц.
  • В системах, требующих обработки и хранения большого объема данных, с возможностью практически неограниченного горизонтального масштабирования (в эксплуатации находятся промышленные кластера из 5000+ узлов, обрабатывающие нагрузку в миллионы RPS, и хранящие петабайты данных).
  • В системах с незначительной нагрузкой, когда поддержка отдельного инстанса базы данных будет расточительна с материальной точки зрения (предлагается использовать YDB в режиме бессерверных вычислений).
  • В системах с плохо предсказуемой или сезонно меняющейся нагрузкой (используя возможность добавления/уменьшения вычислительных ресурсов по запросу и/или в режиме бессерверных вычислений).
  • В высоконагруженных системах, которые шардируют нагрузку между инстансами реляционной базы данных.
  • При разработке нового продукта, для которого нет надежного прогноза будущей нагрузки, или ожидается большая нагрузка, превышающая возможности традиционных реляционных баз данных.