Недавно стало известно, что Яндекс опубликовал исходный код своей СУБД «ЮДБ», в котором реализована поддержка диалекта SQL и транзакций ACID.
СУБД был построен с нуля и изначально разрабатывался с прицелом на обеспечение отказоустойчивости, автоматический переход на другой ресурс и масштабируемость. Стоит отметить, что Яндекс запустил работающие кластеры YDB, включающие более 10 тысяч узлов, которые хранят сотни петабайт данных и обслуживают миллионы распределенных транзакций в секунду.
Основные новинки YDB
Из особенностей, которые выделяются из YDB, использование реляционной модели данных с таблицами YQL (YDB Query Language) используется для запроса и определения схемы данных, которая диалект SQL, адаптированный для работы с большими распределенными базами данных. При создании схемы хранилища поддерживается древовидная группировка таблиц, напоминающая каталоги файловой системы. Предоставляется API для работы с данными в формате JSON.
В возможность создания отказоустойчивых конфигураций которые продолжают функционировать при выходе из строя дисков, узлов, стоек и даже отдельных центров обработки данных. YDB поддерживает синхронное развертывание и репликацию в трех зонах доступности с сохранением состояния кластера в случае отказа одной из зон.
Поддержка доступа к данным с использованием запросов сканирования, предназначенных для выполнения специальных аналитических запросов к базе данных, выполняемых в режиме только для чтения и возвращающих поток grpc.
Кроме того, он также выделяется хранение данных непосредственно на блочных устройствах с помощью компонента PDisk родной и слой виртуального диска. Помимо VDisk запускается DSProxy, который анализирует доступность и производительность дисков, чтобы исключить их при обнаружении проблем.
Из другие преимущества которые выделяются:
- Гибкая архитектура, позволяющая строить различные сервисы поверх YDB, вплоть до виртуальных блочных устройств и персистентных очередей. Подходит для разных типов рабочей нагрузки: OLTP и OLAP (аналитические запросы).
- Поддержка многопользовательских (мультитенантных) и бессерверных конфигураций.
- Возможность аутентификации клиентов. Пользователи могут создавать свои собственные виртуальные кластеры и базы данных на общей общей инфраструктуре, учитывая потребление ресурсов с точки зрения количества запросов и размера данных, или путем аренды/резервирования определенных вычислительных ресурсов и места для хранения.
- Возможность настроить срок полезного использования записей для автоматического удаления устаревших данных.
- Взаимодействие с СУБД и отправка запросов осуществляется с помощью интерфейса командной строки, встроенного веб-интерфейса или YDB SDK, который предоставляет библиотеки для C++, C# (.NET), Go, Java, Node.js, PHP и Python.
- Автоматическое восстановление после сбоев с минимальной задержкой для приложений и автоматическое поддержание заданной избыточности при хранении данных.
- Автоматическое создание индексов по первичному ключу и возможность определения вторичных индексов для повышения эффективности доступа к произвольным столбцам.
- Горизонтальная масштабируемость. По мере роста нагрузки и размера хранимых данных кластер можно расширять, просто подключая новые узлы. Уровни вычислений и хранилища разделены, что позволяет отдельно масштабировать вычисления и хранилище. Сама СУБД следит за равномерным распределением данных и нагрузки с учетом доступных аппаратных ресурсов. Возможна реализация географически распределенных конфигураций, охватывающих несколько центров обработки данных в разных частях мира.
- Поддержка модели строгой согласованности и транзакций ACID при обработке запросов, охватывающих несколько узлов и таблиц. Для повышения производительности можно выборочно отключить проверку согласованности.
- Автоматическая репликация данных, автоматическое секционирование (разделение, сегментирование) при увеличении размера или нагрузки, а также автоматическая балансировка нагрузки и данных между узлами.
Наконец, следует отметить, что YDB используется в проектах Яндекса, код написан на C/C++ и распространяется под лицензией Apache 2.0, вы можете посмотреть исходный код, а также подробнее о нем По следующей ссылке.