Русская Википедия: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].
Примечания
Шаблон:Выбор языка Шаблон:СУБД Шаблон:Яндекс