Материал из РУВИКИ — свободной энциклопедии

YDB

YDB
Логотип программы YDB
Тип СУБД
Разработчик Яндекс
Лицензия Apache 2.0
Сайт официальный сайт проекта YDB

YDB — распределённая отказоустойчивая реляционная система управления базами данных (СУБД) компании Яндекс с открытым исходным кодом.

Функциональность[править | править код]

YDB — технология, позволяющая создавать крупные сервисы, которые способны выдерживать большую операционную нагрузку (до уровня миллионов запросов в секунду). В качестве языка запросов по умолчанию используется YQL[1] (YDB Query Language) — диалект SQL со строгой типизацией[2].

Входит в число СУБД, предоставляющих ACID-гарантии транзакций[3].

Ближайшие аналоги среди систем баз данных, также доступных в виде открытого ПО, — YugabyteDB и CockroachDB.

YDB подразумевает самостоятельное развёртывание на кластеры физических хостов или виртуальных машин при помощи инструментов Kubernetes, либо в качестве управляемого сервиса в Yandex Cloud. Для управляемой реализации выбирается режим бессерверных вычислений или Dedicated-режим.

Особенности реализации[править | править код]

YDB не поддерживает UUID в качестве самостоятельного типа данных[4].

Отсутствует встроенная функция автоинкремента значения поля при добавлении данных в таблицу[4].

Архитектура[править | править код]

YDB работает на кластерах с архитектурой «shared nothing» и использует стандартное оборудование (commodity hardware). Система строится на основе логических компонентов — таблеток. Таблетка реализует протокол решения задачи консенсуса в сети ненадёжных вычислителей. По функциональности этот протокол аналогичен протоколам Паксос и Raft.

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

Существует множество разных типов таблеток помимо DataShard: таблетки SchemeShard для хранения метаданных о пользовательских таблицах, Hive для балансировки и запуска таблеток, Coordinator и Mediator для планирования распределённых транзакций, и многие другие.

Данные таблеток хранятся в слое Distributed Storage, который представляет собой key-value хранилище со специализированным протоколом для поддержки протокола таблеток. Distributed Storage обеспечивает репликацию данных, данные таблеток хранятся в качестве BLOB[3].

YDB реализовывает распределённые транзакции между данными одной или нескольких таблиц. Механизм распределённых транзакций опирается на алгоритм Calvin[5]. Однако в отличие от Calvin, YDB поддерживает выполнение интерактивных транзакций и транзакций, не являющихся детерминистическими. Для этого используются оптимистические блокировки.

При разработке кода YDB применяется модель акторов. Акторы — это однопоточные конечные автоматы, которые обмениваются между собой сообщениями и находятся на различных серверах кластера. Для обмена сообщениями по сети используется библиотека interconnect, разработанная в рамках проекта. Поверх YDB разработаны различные сервисы. Например, виртуальные блочные устройства и персистентные очереди.

Взаимодействие пользователя с YDB происходит по протоколу gRPC[3]. Для YDB существует ряд клиентских SDK, которые реализовывают механизмы обнаружения нод (discovery), клиентской балансировки и т. п.

История[править | править код]

В 2010 году внутри Яндекса началась разработка собственной NoSQL СУБД KiWi[1]. Она начала использоваться в 2011 году. Однако KiWi обеспечивала «согласованность в конечном счёте» и обладала другими недостатками модели NoSQL[3].

В 2012 году началась внутренняя разработка проекта KiKiMR, и только для нужд Яндекса. За пределами компании проект назвали YDB[1]. В 2016 году СУБД стала использоваться в сервисах Яндекса.

В 2018 году состоялся запуск облачной платформы Yandex Cloud, хранение данных в которой было основано на YDB[6]. В то же время компания объявила[7], что в будущем сделает YDB доступной в Yandex Cloud в качестве управляемого сервиса. Позднее такой доступ действительно начал предоставляться наряду с другими управляемыми сервисами — для PostgreSQL, MongoDB и других. Эта облачная версия получила название Yandex Database (позднее — Managed service for YDB).

В апреле 2022 года СУБД YDB была опубликована на GitHub как свободное программное обеспечение под лицензией Apache 2.0[1].

Примечания[править | править код]

  1. 1 2 3 4 Яндекс выложил в опенсорс YDB. Хабр. Дата обращения: 12 июня 2022.
  2. Как писать меньше кода для MR, или Зачем миру ещё один язык запросов? История Yandex Query Language. Хабр. Дата обращения: 14 июня 2022.
  3. 1 2 3 4 Бессерверная альтернатива традиционным базам данных (рус.). osp.ru. Дата обращения: 23 июня 2022.
  4. 1 2 Nikolay Matrosov. Автоинкремент в Yandex Database (англ.). Medium (14 февраля 2022). Дата обращения: 24 апреля 2022.
  5. Calvin: Fast Distributed Transactions for Partitioned Database Systems (англ.). cs.yale.edu. Дата обращения: 19 июня 2022.
  6. 001. Яндекс Облако: обзор платформы – Ян Лещинский (рус.). Youtube. Дата обращения: 12 июня 2022.
  7. about:cloud, ноябрь 2018 | Запись трансляции (рус.). Youtube. Дата обращения: 12 июня 2022.