Компания Citus Data, принадлежащая Microsoft, опубликовала распределённую СУБД Citus 13.0, реализованную в форме расширения к PostgreSQL 17. Citus обеспечивает горизонтальное масштабирование PostgreSQL в кластере на базе типового оборудования и позволяет разносить данные по узлам при помощи шардинга (sharding) с настройкой разделения на уровне столбцов и схемы хранения. Для приложений кластер Citus выглядит как один большой сервер PostgreSQL, объединяющий ресурсы образующих его узлов. Код написан на языке Си и распространяется под лицензией AGPLv3.
Шардинг позволяет организовать хранение очень большого объёма данных, суммарный размер которых существенно превышает локальные накопители каждого из узлов кластера, а реплицирование на несколько узлов обеспечивает отказоустойчивость и позволяет сохранить работоспособность при выходе из строя отдельных узлов. Поступающие от клиентов запросы распараллеливаются по имеющимся серверам для обеспечения предсказуемого времени выполнения запроса к большим массивам данных, пополняемым в режиме реального времени.
Изменения в выпуске Citus 13.0:
- Переход на использование ветки PostgreSQL 17.
- Возможность использования в распределённых запросах функции JSON_TABLE() для преобразования данных из формата JSON в реляционное представление, с которым можно работать как с обычными таблицами PostgreSQL.
- Поддержка синтаксиса «MERGE … WHEN NOT MATCHED BY SOURCE».
- Возможность определения метода доступа для распределённых секционированных таблиц при помощи выражения «CREATE TABLE … USING», а также изменения метода доступа через «ALTER TABLE … SET ACCESS METHOD«.
- Добавлена поддержка указания в распределённых секционированных таблицах автоматически генерируемых столбцов идентификации.
- Разрешено применение ограничений-исключений в
распределённых секционированных таблицах. - Решены проблемы с синхронизацией ролей между узлами.
- Улучшено распределение данных для шардинга при добавлении новых узлов в кластер.
- В команду «EXPLAIN» добавлены опции «MEMORY» и «SERIALIZE», при помощи которых можно определить размер использованной памяти и время, потраченное на преобразование данных для передачи по сети.
Источник: http://www.opennet.ru/opennews/art.shtml?num=62701