В этом посте кратко хочу отметить, как последняя версия Digital Q.DataBase 18.2 воспрои...
В этом посте кратко хочу отметить, как последняя версия Digital Q.DataBase 18.2 воспроизводит сразу три SQL-диалекта: PL/pgSQL, PL/SQL и T-SQL. Ну что ж давайте посмотрим на самый верх схемы. Приложение подключается к базе данных через привычный для него протокол (PGWire, TDS). В версии 18.2 архитектура принципиально меняется. Теперь перед нами уже не один большой серверный процесс с тремя обработчиками, а три самостоятельных модуля: Pearl, Onyx и Marble. Pearl — модуль PostgreSQL; Onyx — модуль, воспроизводящий функциональность Oracle Database; Marble — модуль, воспроизводящий функциональность Microsoft SQL Server; Каждый модуль получил собственный серверный процесс бэкенда и собственный полный конвейер обработки запроса. То есть запрос PostgreSQL приходит в Pearl и внутри Pearl проходит свой путь: парсер, мутатор, планирование, оптимизация и исполнение. Oracle-совместимый запрос приходит уже в Onyx. У него свой менеджер соединений, свой серверный процесс, свой обработчик PL/SQL и свой конвейер выполнения. То же самое происходит с T-SQL в Marble: TDS-клиент подключается к Marble, и дальше запрос обрабатывается уже внутри собственного серверного процесса этого модуля. Поэтому если раньше архитектуру можно было представить как три входа в одно большое здание, то в 18.2 это уже скорее три самостоятельных здания внутри одного технологического комплекса. При этом они НЕ превращаются в три совершенно независимые СУБД. В нижней части схемы как раз показано то, что их объединяет. Здесь находятся поддержка кросс-модульных взаимодействий с общими процессами хранения, монитор состояния системных служб, in-memory сервер DGrid, постоянное Key-Value хранилище RocksDB и механизм поколонного хранения MergeTree. Каждый модуль можно развернуть на одной ноде либо распределить модули по трём отдельным нодам - в зависимости от требований к инфраструктуре.