которые предлагает наша компания, которые доступны и на предыдущих версиях нашей СУБД.
Сервис автоматически конвертирует T-SQL в синтаксис компонента Digital Q.DataBase.
Готовое решение — под задачи высоконагруженных систем.
И СУБД для этого обновлять не потребуется.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 9 5 4
(INSERT, UPDATE, DELETE) из одной базы в другую в реальном времени.
Он используется для отказоустойчивости, масштабирования и синхронизации между системами.
Это значительно ускоряет репликацию и снижает нагрузку на систему.
Please open Telegram to view this post
VIEW IN TELEGRAM
17 8 6 3
Please open Telegram to view this post
VIEW IN TELEGRAM
8 9 5 3
SELECT item_name, quantity
FROM JSON_TABLE(:order_json, '$.items[*]'
COLUMNS (
item_name TEXT PATH '$.name',
quantity INT PATH '$.qty'
)
) AS items;
SELECT country, COUNT(*) AS event_count
FROM JSON_TABLE(user_event, '$'
COLUMNS (
country TEXT PATH '$.geo.country'
)
) AS data
GROUP BY country;
INSERT INTO payments (id, amount, currency)
SELECT *
FROM JSON_TABLE(:json_data, '$.payments[*]'
COLUMNS (
id TEXT PATH '$.payment_id',
amount NUMERIC PATH '$.sum',
currency TEXT PATH '$.curr'
)
);
SELECT *
FROM orders
WHERE json_data->'delivery'->>'status' = 'shipped';
SELECT user_id
FROM user_settings
WHERE json_config->>'theme' = 'dark';
Please open Telegram to view this post
VIEW IN TELEGRAM
6 8 8 5
С Digital Q.DataBase вы можете при желании продолжить работать в том же стиле!
Please open Telegram to view this post
VIEW IN TELEGRAM
6 8 5 5
Please open Telegram to view this post
VIEW IN TELEGRAM
5 8 5 4
Наши интегрированные интерпретаторы (часть ядра QDB!) обрабатывают запросы:
Здесь происходит:
✓ Проверка синтаксиса и семантики
✓ Частичная оптимизация запроса
✓ Формирование первоначального плана выполнения
Сформированный план поступает в ядро QDB (на базе PostgreSQL), где:
✓ Проводится дополнительная оптимизация (если требуется)
✓ Осуществляется непосредственное выполнение запроса
✓ Обеспечивается стабильная работа с данными
Please open Telegram to view this post
VIEW IN TELEGRAM
5 8 7 6
Важно:
Функционал:
Please open Telegram to view this post
VIEW IN TELEGRAM
11 8 7 6
Как работает in-memory "движок" в составе Digital Q.DataBase?
Поддерживает автоматическое перемещение информации между нодами кластера, при этом память используется весьма экономно — информация хранится только в указанном количестве копий (обычно 2–3), симметрично доступна через любую из нод, но на другие ноды перемещается всего в трёх случаях:
Наличие нескольких копий гарантирует сохранность информации при изъятии любой ноды из кластера — всё, что на ней было, будет снова восстановлено в заданном числе экземпляров на других нодах.
Реально неубиваемо!
Please open Telegram to view this post
VIEW IN TELEGRAM
5 7 7 6
Достаточно только Digital Q.DataBase, которая возьмёт на себя хранение как персистентной информации, так и временных данных в памяти.
Please open Telegram to view this post
VIEW IN TELEGRAM
10 6 6 5
Это позволяет кратно ускорять работу информационных систем, иногда даже в десятки раз.
Например, "горячие остатки" банковской системы в памяти.
Вместо того чтобы каждый раз собирать доступный для использования клиентом остаток по разным таблицам (остаток на счёте минус имеющиеся лимиты, блокировки, аресты), система лишь один самый первый раз рассчитывает его, а далее подвешивает в память.
Нужно обновить данные?
Они тут же обновляются и в памяти, и потому всегда остаются актуальными.
И ещё раз напомним, что для использования всего этого чуда не надо менять архитектуру системы, не надо иметь программиста-бэкендера на языке высокого уровня вроде Java, Go или C++ — достаточно того, что и так умеет обычный SQL-разработчик, которых в банке много.
Please open Telegram to view this post
VIEW IN TELEGRAM
8 7 5 4
Где они могут храниться❓
In-memory данные (в зависимости от потребностей и решаемой задачи) могут храниться:
🟣 в пределах одной сессии;
🟣 для всех сессий конкретного пользователя;
🟣 для всех пользователей, подключённых к одной БД;
🟣 глобально в пределах сервера или кластера серверов.
Есть возможность гибкого управления доступом к этим данным.
In-memory данные (в зависимости от потребностей и решаемой задачи) могут храниться:
Есть возможность гибкого управления доступом к этим данным.
Please open Telegram to view this post
VIEW IN TELEGRAM
6 9 8 6
Если у вас есть ресурсоёмкая хранимая процедура, выполняющая некоторый нетривиальный расчёт, которую не хочется запускать каждый раз, можно:
А можно даже фоновым процессом обеспечить их актуальность для всех пользователей.
Можно в разы ускорить работу legacy-приложения, при этом не потребуется сильной переделки архитектуры или значительного переписывания логики SQL-процедур.
Вся обработка остаётся внутри базы!
Please open Telegram to view this post
VIEW IN TELEGRAM
9 8 6 5
Сегодня поговорим про ядро.
Итак, после протокола и интерпретатора запрос поступает к ядру СУБД.
Данный сервис является ядром СУБД.
Оно обрабатывает запросы пользователей, обеспечивает целостность данных, оптимизирует производительность и поддерживает параллельную работу множества клиентов.
Please open Telegram to view this post
VIEW IN TELEGRAM
11 10 5 4
В основе инструмента лежит pgBackRest, но мы интегрировали его в платформу Q.DataBase, обеспечили поддержку российских ОС (Astra Linux, РЕД ОС, Альт) и добавили управление через консоль «Центра управления».
Это не отдельный сторонний сервис, а часть экосистемы Q.DataBase — с единым администрированием и технической поддержкой.
Please open Telegram to view this post
VIEW IN TELEGRAM
9 7 5 4
Что это даёт:
Функционал:
Это решение позволяет стабилизировать работу приложений, ускорить доступ к данным и обеспечить готовность Digital Q.DataBase к задачам цифровой трансформации.
Please open Telegram to view this post
VIEW IN TELEGRAM
7 8 6 5
PostgreSQL 19-devel на Linux
Ryzen 7950X, 32 ГБ RAM, SSD
Бенчмарк TPC-C (128 складов, 100 соединений)
Базовая производительность: ~7082 TPS (транзакций в секунду)
Postgres хранит считанные блоки в памяти для ускорения запросов. В нормальной конфигурации с 10 ГБ кэша он выдавал ~7082 TPS. Но при сжатии буфера до 2 МБ производительность рухнула ниже 500 TPS.
Обычно autovacuum запускается периодически. Здесь его настроили так, что даже один INSERT сразу вызывал уборку. В комбинации с маленьким кэшем это дало постоянные обращения к диску и падение до ~293 TPS.
Все изменения начали записываться в журнал (WAL) до внесения в базу максимально агрессивно. Результат — TPS упал ниже 100.
Параметры random_page_cost и cpu_index_tuple_cost завысили настолько, что планировщик перестал использовать индексы и перешёл на последовательное сканирование.
Даже при увеличении кэша до 8 МБ TPS стал меньше единицы.
Параметры io_method = worker и io_workers = 1 перевели систему в однопоточный режим. Итог — TPS около 0,1.
На 100 соединениях за 120 секунд завершились всего 11 транзакций — остальные упали с OOM или по таймауту.
Не ради практической пользы, а чтобы лучше понять, как работает Postgres изнутри.
Иногда изучение пределов системы даёт больше понимания, чем обычная оптимизация.
byteofdev.com/posts/making-postgres-slow
Please open Telegram to view this post
VIEW IN TELEGRAM
7 7 6 6
Адаптер разработан на базе проверенной технологии oracle_fdw, работает на импортонезависимом стеке и полностью соответствует требованиям цифровой трансформации.
Please open Telegram to view this post
VIEW IN TELEGRAM
11 6 5 5
С тех пор она стала лишь немного «умнее» и обросла новыми настройками, но архитектурно осталась прежней. Поэтому, несмотря на длительную историю, интерес к ней не угасает — её регулярно упоминают в статьях и обсуждениях.
Что ж, давайте разберёмся, какие у неё сильные и слабые стороны.
Код «олдскульный», поддержка и расширение требуют знаний Perl.
Таблицы с NESTED TABLES не конвертируются вообще.
Поддерживаются только «костыльно», логика часто ломается.
В Oracle их более 760.
В PostgreSQL есть расширение orafce, где реализованы лишь отдельные функции из самых популярных пакетов (например, dbms_output).
Но это капля в море — реальных поддержанных пакетов меньше десяти.
В итоге после конвертации процедуры, использующие пакеты, содержат вызовы к тому, чего в ванильном PostgreSQL просто нет.
Значит, либо переписывать вручную, либо логика ломается полностью.
Частично конвертируются, часто с потерями или предупреждениями.
Конвертируется плохо, требует ручной переписки.
Почти никогда не работает «из коробки».
Если процедура заработала без ручной правки — это вам просто очень повезло.
Реалистично воспринимать результат только как «подстрочник» для переписывания.
Код, сгенерированный утилитой, может быть рабочим, но неоптимальным для PostgreSQL.
Конфигурационный файл громоздкий и не всегда очевидный.
Без опыта миграции легко запутаться.
Please open Telegram to view this post
VIEW IN TELEGRAM
11 8 7 5
Существует и доработанная версия — ora2pgpro.
Please open Telegram to view this post
VIEW IN TELEGRAM
7 7 7 5