Анализ функции кэширования данных механизма многомерного анализа Mondrian и реализация расширения

анализ данных

В этой статье в основном представлен анализ исходного кода модуля кеша Mondrian и реализация расширения кеша.

Обзор

онлайн аналитическая обработкаКонцепция оперативной аналитической обработки (OLAP) была впервые предложена Э. Ф. Коддом, отцом реляционных баз данных, в 1993 году. Приложение OLAP в настоящее время является одним из важных приложений в хранилище данных и является ключом к анализу решений. Являясь наиболее важным инструментом многомерного анализа хранилища данных, OLAP использует данные, хранящиеся в хранилище данных, для выполнения различных операций анализа и возвращает результаты анализа лицам, принимающим решения, в интуитивно понятной и простой для понимания форме. Его цель — удовлетворить запросы и требования к отчетности, характерные для поддержки принятия решений или многомерных сред, а ядром технологии является многомерный анализ. OLAP обладает выдающимися преимуществами, такими как гибкие функции анализа, интуитивно понятные операции с данными и визуальное представление результатов анализа, так что пользователи могут легко и эффективно анализировать большие объемы сложных данных, чтобы быстро делать правильные выводы и помогать в принятии решений.

Pentaho Analysis Services, т.е.Mondrian(Код проекта), это многомерный анализ Pentaho, решение OLAP. Mondrian — это механизм OLAP, и это механизм ROLAP. ROLAP относится к OLAP, который использует реляционную базу данных. Он не управляет хранением данных сам по себе. Это делает реляционная база данных, которая получает доступ к данным через JDBC. Это значительно снижает сложность механизма OLAP и позволяет использовать несколько баз данных.

Мондриан использует общедоступную лицензию Eclipse с открытым исходным кодом.

С точки зрения архитектуры Mondrian можно разделить на четыре уровня: уровень представления, уровень измерений, уровень звезды и уровень хранения. уровень представленияОпределяет, что конечный пользователь может в конечном итоге увидеть на дисплее через систему, и предоставляет средства и способ взаимодействия пользователя с системой. Существуют различные способы отображения многомерных данных, в том числе сводные таблицы, круговые диаграммы, линейные и столбчатые диаграммы и т. д., а также некоторые расширенные инструменты графического отображения, такие как интерактивные карты, динамическая графика и т. д. Программа дисплейной части может быть реализована с помощью Java Swing или JSP, а диаграмма может быть возвращена в виде файла формата JPEG или GIF или упакована и передана через XML. Пользователь спрашивает систему, что отображать через уровень представления, и служба OLAP отвечает на запрос.

Второй слой — это слой измерения.. Уровень измерений проверяет и выполняет запросы запросов MDX поэтапно. Запрос запроса можно рассматривать как выполняемый в несколько этапов. Сначала вычисляется ось измерения, а затем рассчитываются значения отдельных элементов на этой оси измерения. Чтобы повысить эффективность вычислений, уровень измерений отправляет запросы элементов (ячеек) на уровень агрегации (уровень агрегации) пакетами. В то же время метаданные описывают многомерную модель и способы сопоставления многомерной модели с реляционной моделью.

Третий слой — звездный слой., который отвечает за поддержание кэша агрегата (одного или нескольких кубов), то есть агрегат представляет собой набор находящихся в памяти элементов (ячеек), представленных размерной информацией. Уровень измерений второго уровня передает запрос указанного элемента на звездный уровень.Если запрашиваемый элемент отсутствует в кеше или выполняет операцию прокрутки агрегации, менеджер агрегации отправит запрос данных на уровень хранения, тем самым загружая данные в память.

уровень хранениядля СУБД. Он отвечает за предоставление агрегированных данных элементов и членов таблиц измерений. В настоящее время Mondrian в основном поддерживает РСУБД в качестве источника данных и не поддерживает прямые многомерные базы данных.

Вышеупомянутые четыре уровня можно развернуть на одном компьютере одновременно или распределить на несколько компьютеров. Но второй и третий уровни должны быть развернуты на одном компьютере, который представляет собой службу Mondrian. Уровень хранилища можно развернуть на других машинах и получить к нему доступ через удаленные соединения JDBC. В многопользовательской системе уровень представления может существовать на каждом пользовательском терминале (если только он не сгенерирован сервером через страницы Jsp).

Чтобы повысить скорость ответа на запросы при больших объемах данных, Mondrian автоматически кэширует результаты первого запроса в памяти, и если последующий запрос попадет в кешированный контент, доступ к базе данных будет закрыт. Эта реализация имеет проблемы при реализации OLAP в реальном времени.Частые изменения данных в OLAP в реальном времени приводят к тому, что данные в кэше не обновляются.

Интерфейс управления кэшем: для обновления кэша без перезапуска OLAP-сервера Mondrian предоставляет ряд интерфейсов для обновления кэша, которые поддерживают указание очистки кэша метаданных и кэша результатов запроса указанной схемы; действие очистки может быть либо все очищено, либо частично очищено.

Анализ функции кэша

Функция кеша в Mondrian, запрошенный оператор mdx будет храниться в кеше. Данные будут считаны непосредственно из кэша при следующем повторном запросе.Мягкие ссылки используются в Mondrian, и объекты будут восстановлены, если памяти недостаточно. Но некоторые SegmentBody очень большие. Это приводит к частому повторному использованию объектов, что часто требует повторных запросов к базе данных. Таким образом, оптимизация mondrian может начаться с изменения кэшированной части, а кэш mondrian можно поместить в другой процесс, что может значительно снизить нагрузку, вызванную mondrian. Кэш-часть может быть изменена на популярный ehcache или memcache, а ehcache и memcache также поддерживают кластерный или файловый кеш. Если ваш объем данных очень велик, производительность запросов к базе данных не может быть оптимизирована, например, нетрадиционный куст базы данных spark sql , который по своей природе имеет недостатки в производительности запросов. На этом этапе вы можете изменить раздел кеша, чтобы упростить использование mondrian. Агрегированные данные хранятся в кеше, так что агрегированные данные могут быть непосредственно извлечены из кеша при выполнении следующего запроса.

тип кэша

Mondrian имеет три разных кеша: Schema, Member, Segment.

Кэш схемы хранит схему в кэше, поэтому ее не нужно перечитывать каждый раз при загрузке куба.

Кэш элементов хранит значения членов из измерений в памяти, уменьшая количество чтений из базы данных.

Segment Cache хранит в кэше предварительно вычисленные значения без рециркуляции и пересчета, что позволяет сократить количество повторных вычислений чтения и значительно ускорить анализ.

кэш очистить

Когда исходные данные изменяются, кэшированные данные необходимо обновлять, обычно при выполнении ETL кэшированные данные необходимо очищать.

Schema

Каждый кэш схемы будет храниться в памяти уникальным образом. Когда схема сбрасывается из кэша, связанные с ней кэши элементов и сегментов также сбрасываются, что является подходом с очень низкой производительностью. Однако, если схема изменилась или детали определения того, что нужно обновить, слишком сложны, это, вероятно, лучший и, безусловно, самый простой способ. Кэш можно повторно заполнить с помощью методов, описанных в предыдущем разделе.

Большинство инструментов Mondrian, таких как PunaHo, позволяют обновлять данные вручную. В PunaHo вы можете использовать либо Enterprise Console, либо User Console. Если вы вошли в консоль пользователя как администратор, просто выберите «Инструменты» > «Обновить» > «Mondrian Cache».

Ручные методы хороши, но администраторам часто нужна автоматизация. Очистка кеша как часть общего рабочего процесса ETL. На приведенной ниже диаграмме показано, как кэширование Mondrian вписывается в общий рабочий процесс ETL. После заполнения базы данных OLAP вызывается Mondrian для очистки и сохранения кэша. Этот процесс обеспечивает синхронизацию кэша с базовой базой данных, чтобы при выполнении анализа данные были актуальными.

Чтобы упростить сохранение кеша в процессе ETL, вы можете создать класс, содержащий метод очистки раздела кеша. Вы также можете создать JSP, используя новый класс. Затем становится легко сохранить кеш, вызвав URL-адрес с параметрами конфигурации.

На приведенной ниже диаграмме показаны три сценария, которые поддерживает инструмент ETL. Сценарии варьируются от сброса всего до сброса определенной области кеша. SPI управления кешем Mondrian очень детализирован и может позволить вам контролировать любую часть кеша.

В листинге показан код JSP, который управляет параметрами получения кеша, а затем вызывает класс CacheFlusher для очистки указанной части кеша. Это легко отделяет работу по очистке кеша от пользовательского интерфейса. Или встроены в приложения, где это уместно.

  • Кэш обновления JSP

    Чтобы сбросить весь кеш, можно просто вызвать JSP без параметров. Например, если JSP развернут в общей папке приложения patahoweb на локальном компьютере. позвонюhttp://localhost/punaho/pult/flashcache.jsp. Это вызовет метод FlushAll() класса CacheFlusher, который применяется только к новым соединениям.

  • Весь кеш Shema сбрасывается

Cube

В среде с множеством различных режимов и кубов может существовать несколько процессов ETL, которые применяются только к данному кубу. После обновления данных необходимо обновить только кэшированные данные затронутых кубов. Это означает, что другие кубы будут продолжать использовать кеш. Это влияет только на новые подключения.

В следующем коде показан код для очистки кэша указанного куба. Чтобы очистить кэш, просто вызовите JSP и укажите Catelog и Cube для очистки кэшированных данных.

Ø Укажите кэш куба для очистки

Это прекрасно очищает весь кеш Cube. Но обычно просто хотят обновить часть данных куба, особенно когда время является измерением, потому что прошлые факты не должны меняться. В следующем разделе описывается, как очистить кэш куба для определенного региона.

Region

Обновление указанного куба области Кэш куба обеспечивает лучший контроль над кэшем. Предположим, вы отслеживаете продажи в течение нескольких лет. Существует процесс, который должен обновлять данные из рабочей базы данных в хранилище данных каждую ночь, и ему нужно только обновлять кэш измененных данных, таких как продажи за этот месяц. В приведенном ниже коде показан код, необходимый для обновления области. Это выглядит немного сложно, но на самом деле есть только несколько ключевых параметров вызова. Схема кода и куб теперь понятны, поэтому давайте просто сосредоточимся на области очистки кода.

Диапазон ячеек — это группа диапазонов ячеек в кубе, которые необходимо очистить. Метод memberNameToSegmentList преобразует имена членов в специальный список членов.

После определения всех регионов создаются перекрестные соединения и элементы управления кэшем, а объекты обновляют регионы. Следующий вызов mondrian прочитает ячейки в указанном диапазоне из базы данных и заполнит кеш.

Анализ исходного кода

Диспетчер сеансов: самая важная часть. Принимает запросы MDX, анализирует MDX и возвращает результаты.

Менеджер схемы: тесно связан с инициализацией. В основном некоторые важные структуры данных, такие как построение буферных пулов и создание многомерных моделей.

Aggregate Manager: реализует управление агрегированными таблицами. В основном это управление кэшем OLAP, что относится к части оптимизации производительности.

Диспетчер измерений: управление измерениями. Реализуйте сопоставление измерений в многомерных моделях и столбцов в таблицах реляционной базы данных, а также в диспетчере схем есть некоторые функции для обработки этих сопоставлений.

Кэш схемы

Кэш схемы сохраняет объекты схемы в пуле кэша, поэтому нет необходимости перезагружать каждый раз при загрузке куба, что значительно ускоряет анализ.

Классы, связанные с кэшем

имя класса инструкция
mondrian.rolap.RolapConnection Подключение службы Mondrian OLAP
mondrian.rolap.RolapSchema Классы многомерных схем данных
mondrian.rolap.RolapSchemaPool Класс обработки кэша схемы
mondrian.rolap.SchemaKey Ключ кэша схемы

Инициализировать кеш

  • Инициализировать буферный пул схемы

  • Инициализировать объект RolapConnection

    Каждый RolapConnection имеет объект RolapSchema, и соответствующий объект Schema будет инициализирован во время инициализации объекта RolapConnection.

    В процессе инициализации объекта Schema сначала перейдите в пул кеша схемы, чтобы найти данные. Если есть кешированный объект данных, верните его напрямую. В противном случае инициализируйте и загрузите объект схемы и сохраните объект в пуле кеша.

  • Инициализировать объект схемы

    (1) Анализ XML для создания схемы

    С помощью метода загрузки RolapSchema передайте схему в виде каталога, используйте org.eigenbase.xom.XOMUtil для создания синтаксического анализатора XML, передайте XML в синтаксический анализатор и верните объект DOMWrapper _def. Создайте синтаксический анализатор DOMElement на основе этого объекта, используйте его для анализа элементов, содержащихся в схеме, получите все атрибуты схемы и сохраните аннотацию, параметр, измерение, куб, виртуальный куб, namedSet и другие фрагменты в наборе NodeDef для сформировать древовидную структуру, выполнить обход этого дерева в глубину.

    (2) RolapSchema загружает схему

    Сначала проверьте, есть ли в схеме определяемая пользователем функция, а затем инициализируйте FunctionTable. Затем проанализируйте дерево результатов в соответствии со схемой и создайте SmartMemberReader для иерархии, чтобы кэшировать элементы измерения и их подэлементы. Наконец, инициализируйте AggregationManager и вернитесь.

загрузить кеш

Найдите данные кэша схемы в соответствии с параметрами подключения, переданными объектом инициализации RolapConnection. Если есть, верните объект кэша схемы напрямую. В противном случае создайте и загрузите объект схемы и сохраните объект в пуле кэша.

очистить кэш

Кэш схемы сохраняет объекты схемы в пуле кэша.При изменении и обновлении XML-файла схемы необходимо очистить кэш схемы и перезагрузить кэшированные данные.

Кэш сегмента

Сегментный кеш хранит в кеше предварительно вычисленные значения без рециркуляции и пересчета, что позволяет уменьшить количество повторных вычислений чтения и значительно ускорить анализ.

Классы, связанные с кэшем

имя класса инструкция
mondrian.spi.SegmentHeader Ключевой объект, используемый для извлечения сегментов из кэша сегментов.
mondrian.spi.SegmentBody объект, содержащий данные сегментного кэша
mondrian.rolap.agg.SegmentCacheManager Активный объект, используемый для поддержания «глобального кеша» (в JVM, но совместно используемого между соединениями с использованием определенной схемы) и «внешнего кеша»

Включить и отключить кеш

Использование кэша данных Mondrian контролируется элементом конфигурации атрибута файла конфигурации, disableCaching определяет, следует ли кэшировать данные каждый раз при выполнении запроса, а disableLocalSegmentCache определяет, следует ли использовать локальный кэш.

  1. Конфигурация mondrian.properties

  1. Исходный код MondrianProperties.java

  1. инструкция
название инструкция
mondrian.rolap.star.disableCaching Верно: не использовать кеш. Ложь: использовать кеш.
mondrian.rolap.star.disableLocalSegmentCache Верно: не использовать локальный кеш Неверно: использовать локальный кеш

Расширение службы кэширования

Расширение службы кэширования Mondrian можно реализовать с помощью конфигурации файла свойств и поиска службы. Процесс реализации заключается в закрытии локального кеша и расширении внешнего кеша.

Отключить локальный кеш

Конфигурация mondrian.properties

mondrian.rolap.star.disableLocalSegmentCache=true отключает обработку локального кэша MemorySegmentCache

Реализация расширения службы

  1. Реализовать интерфейс SegmentCache

  1. Настроить службу кэширования

Настройка классов обслуживания с помощью файлов конфигурации

Настройте пользовательское расширение для реализации класса интерфейса SegmentCache в файле свойств mondrian.properties.

mondrian.rolap.SegmentCache

Реализовано через поиск службы

Создайте файл конфигурации службы mondrian.spi.SegmentCache.

код обработки