Разрабатываемая система METAS Control основана на технологии взаимосвязанных метаданных, описывающих ИС с разных сторон взаимодействия пользователя с данной ИС [1]. В частности, интерпретируя метаданные физического уровня, система формирует запросы к БД для CRUD операций (структура БД заранее не определена). Система является распределенной: сервер выполняет импорт поступающих во внешние источники данных, клиент по собственному запросу / оповещению сервера принимает требуемые данные для отображения.
При проведении мониторинга данные, поступающие от внешних источников, сохраняются в серверной БД с сохранением временных меток (timestamp). Определим схему потоков данных на рис. 1.
Пользователями полученных данных являются как клиентские приложения (для отображения текущих значений), так и сервисы по анализу данных на сервере. При многопользовательском варианте работы вопросы производительности играют ключевую роль в стабильном функционировании сервера. Кроме того, вычисления выражений, построение аналитических/агрегирующих отчетов на основе полученных данных серьезно повышает нагрузку на СУБД. Введение промежуточного уровня - кэша данных - позволит оптимизировать и ускорить работу сервера.
В связи со спецификой решаемой задачи выделим требования, предъявляемые к кэшу:
Кроме текущих значений (с текущими временными метками), пользователь может запросить архивные данные, не содержащиеся в кэше текущих значений. В связи с этим кэш целесообразно разбить на 2 уровня: archive (в нем хранятся недавно используемые архивные данные, запрошенные пользователем для построения отчета / просмотра истории) и runtime (текущие значения показателей за определенный временной интервал).
Такая структура схожа с уровнем Staging Area в архитектуре хранилищ данных (рис. 2). Staging Area - это место для временного хранения копий данных из систем источников [2]. Данные, поступающие из БД приложений, копируются на данный уровень, проходя различные преобразования и предобработки (например, для выполнения выражений требуется, чтобы все аргументы были готовы для выполнения вычислений), трансформации и очистки. Данные, поступающие в кэш, неизменяемы и имеют ценность лишь в ограниченный период времени, что соответствует принципам хранилищ данных.
Кэширование при запросах к БД используется и в ORM-средствах (ORM - Object Relation Mapping, объектно-реляционное отображение), таких как NHibernate и MS EntityFramework. Так, в NHibernate кэшируются не только сами данные, полученные в результате выборки по ключу / произвольному запросу, но и сами запросы и их результаты. Поскольку серверный кэш используется, в основном, в качестве буфера временных значений в течение небольшого интервала времени, то целесообразно использовать кэширование в локальной памяти приложения сервера (подход схож с ORM средствами).
Кроме серверной части возможность кэширования должна быть и на клиенте. В ходе работы системы реального времени появляется необходимость кэширования получаемых и/или вычислимых данных для компонентов визуализации. Например, построитель графиков должен хранить диапазон значений за определенный промежуток времени. Безусловно, если все эти исходные данные хранятся в локальной БД, проблем не возникает - компонент обращается к ней через SQL и получает необходимый набор значений. Однако архитектура распределенных систем спроектирована таким образом, чтобы данные располагались максимально близко к месту их обработки - на сервере БД.
Особенности кэширования значений атрибутов на клиенте:
Список литературы