02.07.2022

Яндекс открыл код распределённой СУБД YDB, поддерживающей SQL

Компания Яндекс опубликовала исходные тексты распределённой СУБД YDB, реализующей поддержку диалекта SQL и ACID-транзакций. СУБД создана с нуля и изначально развивается с оглядкой на обеспечение отказоустойчивости, автоматического восстановления при сбоях и масштабируемости. Отмечается, что компанией Яндекс запущены рабочие кластеры YDB, включающие более 10 тысяч узлов, хранящие сотни петабайт данных и обслуживающие миллионы распределённых транзакций в секунду. YDB используется в таких проектах Яндекс, как Маркет, Облако, Умный Дом, Алиса, Метрика и Auto.ru. Код написан на языках C/C++ и распространяется под лицензией Apache 2.0.

Особенности проекта:

  • Использование реляционной модели данных с таблицами. Для запросов и определения схемы данных используется язык YQL (YDB Query Language), представляющий собой диалект SQL, адаптированный для работы с большими распределёнными базами данных. При создании схемы хранения поддерживается древовидная группировка таблиц, напоминающая каталоги в файловой системе. Предоставляется API для работы с данными в формате JSON.
  • Поддержка доступа к данным с использованием скан запросов, предназначенных для выполнения аналитических ad-hoc запросов над БД, выполняемых в режиме только для чтения и возвращающих поток grpc.
  • Взаимодействие с СУБД и отправка запросов осуществляется при помощи интерфейса командной строки или набора YDB SDK, предоставляющего библиотеки для языков C++, С# (.NET), Go, Java, Node.js, PHP и Python.
  • Возможность создания отказоустойчивых конфигураций, продолжающих работу при выходе из строя отдельных дисков, узлов, стоек и даже датацентров. YDB поддерживает развёртывание и синхронную репликацию в трёх зонах доступности с сохранением работоспособности кластера в случае выхода из строя одной из зон.
  • Автоматическое восстановление после сбоев с минимальными задержками для приложений и автоматическое поддержание заданной избыточности при хранении данных.
  • Автоматическое создание индексов по первичному ключу и возможность определение вторичных индексов для повышения эффективность доступа к произвольным колонкам.
  • Горизонтальная масштабируемость. По мере роста нагрузки и размера хранимых данных кластер можно расширять простым подключением новых узлов. Уровни для вычислений и хранения разделены, что позволяет раздельно наращивать вычислительную мощность и размер хранилища. СУБД сама следит за равномерным распределением данных и нагрузки с учётом имеющихся аппаратных ресурсов. Поддержка развёртывания территориально распределённых конфигураций, охватывающих несколько датацентров в разных частях света.
  • Поддержка модели строгой непротиворечивости и ACID-транзакций при обработке запросов, охватывающих несколько узлов и таблиц. Для повышения производительности возможно выборочное отключения контроля непротиворечивости.
  • Автоматическая репликация данных, автоматическое секционирование (партицирование, шардирование) при увеличении размера или нагрузки и автоматическая балансировка нагрузки и данных между узлами.
  • Хранение данных непосредственно на блочных устройствах, используя собственный компонент PDisk и прослойку VDisk. Поверх VDisk выполняется DSProxy, который анализирует доступность и характеристики работы дисков, для их исключения в случае выявления проблем.
  • Гибкая архитектура, позволяющая создавать поверх YDB, различные сервиcы, вплоть до виртуальных блочных устройств. Пригодность применения для разных видов нагрузки, OLTP и OLAP (аналитические запросы).
  • Поддержка многопользовательских (multitenant) и бессерверных конфигураций. Возможность аутентификации клиентов. Пользователи могут создавать свои кластеры с БД в общей совместной инфраструктуре с учётом на уровне числа запросов и размера данных или арендуя/резервируя определённые вычислительные ресурсы и объём в хранилище.
  • Возможность настройки времени жизни записей для автоматического удаления устаревших данных.

Источник.