ПРОГРАММНЫЕ ПРОДУКТЫ И СИСТЕМЫ
Архив статей журнала
В работе определена актуальность задачи кластеризации данных в реальном масштабе времени в виде динамически встраиваемой библиотеки для СУБД PostgreSQL с открытым исходным кодом. Сформулированы условия для выполнения кластеризации в реальном времени, заключающиеся в обеспечении достаточной производительности, при которой время определения кластеров не превышает время записи данных в таблицу и ограниченное количество данных для кластеризации. Методы PostgreSQL доступны в devel-библиотеке, что позволяет использовать их для взаимодействия с данными на уровне внутреннего представления и других языков программирования, выполняющих некоторые операции быстрее, чем язык запросов SQL. Схема взаимодействия между элементами для кластеризации включает БД, в которую установлены динамически встраиваемая библиотека и расширение TimescaleDB для организации хранения данных сервером БД; интерпретатор - программная прослойка для перевода данных из внутреннего представления в типы используемого языка перед кластеризацией и, наоборот, перевода результатов кластеризации во внутренний формат для их сохранения в БД; кластеризатор - программа, выполняющая кластеризацию переданных данных согласно алгоритму. Предлагаемая библиотека представляет собой реализацию триггерной функции, которая по сути является интерпретатором, связывающим кластеризатор с БД. Если это первое срабатывание функции для таблицы, то производится выбор начальных центроидов способом, заданным пользователем. В противном случае происходит считывание данных о центроидах из таблицы. Приведена демонстрация работы библиотеки. Набор данных для кластеризации сгенерирован случайным образом с концентрацией около заданных координат центроидов. Библиотека не ограничивает пользователя как в размерности точек, которые необходимо распределить по кластерам, так и в количестве таблиц, в которые может производиться вставка данных. Ввиду вычислительной сложности алгоритмов имеется ограничение на максимальное число данных для кластеризации.