8 апреля 2025
Как настроить подключение к Apache Ignite в FastReport .NET
Apache Ignite — это распределённая платформа in-memory computing, которая позволяет обрабатывать и хранить большие объёмы данных в оперативной памяти для достижения высокой производительности и масштабируемости.
В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов. Следуя нашим рекомендациям, вы сможете эффективно использовать Apache Ignite в качестве источника данных для ваших отчетов в FastReport .NET.
Реализованный плагин для подключения к Apache Ignite представляет собой легковесное решение на базе Ignite.NET Thin Client.
Возможности плагина Apache Ignite
Подключение к кластерам Apache Ignite: плагин позволяет подключаться к одному или нескольким узлам кластера. Адреса узлов указываются в формате хост:порт, разделённые запятыми;
Работа с кэшами: поддерживается взаимодействие с кэшами как в режиме ключ-значение, так и в виде SQL-таблиц;
Аутентификация: плагин поддерживает аутентификацию, если в конфигурации кластера включена опция authenticationEnabled;
Обработка различных типов данных: плагин обеспечивает корректную обработку различных типов данных, включая пользовательские объекты.
Особенности реализации Apache Ignite
Ignite предлагает два способа логического представления данных: кэш ключ-значение и SQL-таблицы (схемы). Несмотря на различия, эти представления равнозначны и могут отображать одни и те же данные.
В Ignite SQL-таблица и кэш ключ-значение — это два равнозначных способа представления одной внутренней структуры данных. Доступ к данным можно получить с помощью API ключ-значение, SQL-операторов или обоих методов.
Кэш — это набор пар ключ-значение, доступ к которым осуществляется через API ключ-значение. SQL-таблица в Ignite похожа на таблицы в традиционных системах управления базами данных, но с некоторыми дополнительными ограничениями. Например, у каждой SQL-таблицы должен быть первичный ключ.
Таблицу с первичным ключом можно представить как кэш ключ-значение, где столбец первичного ключа выступает в роли ключа, а остальные столбцы таблицы — это поля объекта (значение).
Основное отличие между этими двумя представлениями данных заключается в методе доступа к ним. С помощью кэша ключ-значение можно работать с объектами, используя поддерживаемые языки программирования. SQL-таблицы, в свою очередь, поддерживают стандартный синтаксис SQL, что может быть полезно, например, при переносе данных из существующей базы данных.
Как подключить плагин в проект
Для использования плагина необходимо предварительно собрать проект, находящийся по пути: ..\Extras\Core\FastReport.Data\FastReport.Data.Ignite. Далее плагин требуется зарегистрировать. Это можно сделать двумя способами.
Способ 1. С помощью кода.
Скопируйте следующий код и вставьте в свой проект. Это необходимо сделать всего один раз при запуске приложения.
FastReport.Utils.RegisteredObjects.AddConnection(typeof(IgniteDataConnection));
Способ 2. С помощью дизайнера отчетов. Для подключения коннектора в дизайнере необходимо перейти в меню «Файл|Настройки...» в Ribbon интерфейсе (меню «Вид|Настройки...» в стандартном интерфейсе). В открывшемся окне выбрать вкладку «Плагины» и добавить собранную .dll плагина как показано ниже.
После добавления плагина необходимо выполнить перезапуск дизайнера FastReport .NET.
Как подключить источник данных в дизайнере
Для создания подключения к Apache Ignite необходимо перейти в меню «Данные» и выбрать пункт «Новый источник данных».
В появившемся окне нажмите на кнопку «Новое подключение» затем в выпадающем списке типов подключения кликните на вариант «Подключение к Apache Ignite». В появившемся окне укажите адрес(а) узлов, имя пользователя и пароль (при наличии).
Если соединение выполнено успешно, то на следующем шаге появится список таблиц (кэшей), содержащихся в указанных на предыдущем шаге узлах:
Различия при работе с кэшами в плагине
Плагин поддерживает работу с кэшами, созданными как ключ-значение, так и как SQL-таблицы.
Способ создания и конфигурации кэша в Apache Ignite напрямую влияет на состав полей и отображение типов данных. В зависимости от выбранного метода (например, использование классов с атрибутами [QuerySqlField], программное определение через QueryEntity или работа с динамическими данными), результат может отличаться. Это касается как списка доступных полей, так и их типов данных.
В следующих примерах кода будут использоваться фрагменты из официальных примеров функционала Apache Ignite. Эти примеры можно скачать по этой ссылке в разделе BINARY RELEASES: https://ignite.apache.org/download.cgi.
Откроем полученный архив и переместимся в следующую папку:
..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Thin
Из этих примеров используем пользовательский класс Organization, который представляет модель данных организации. Этот класс содержит следующие свойства:
Name: Название организации. Помечено атрибутом [QuerySqlField(IsIndexed = true)], что позволяет использовать его в SQL-запросах и создает индекс для ускорения поиска.
Address: Адрес организации, представленный вложенным объектом типа Address. Также доступен для SQL-запросов благодаря атрибуту [QuerySqlField].
Type: Тип организации (например, коммерческая или некоммерческая), представленный перечислением OrganizationType.
LastUpdated: Временная метка, указывающая, когда данные об организации были обновлены последний раз.
Полный код класса можно найти в папке:
..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Shared\Models
Создание кэша с использованием QueryEntity
QueryEntity — это компонент Apache Ignite, который позволяет программно описать структуру данных (схему) для кэша и задать поля с их типами вручную.
Для кэшей с метаданными (QueryEntity) поддерживаются операции получения списка полей и их типов данных. Пользовательские типы данных обрабатываются следующим образом:
В списке полей отображаются только поля, помеченные атрибутом [QuerySqlField].
Поля представлены в формате тип_данных.имя_поля.
Например, если на стадии настройки кэш создан следующим образом:
var organizationCache = ignite.GetOrCreateCache<int, Organization>(new CacheClientConfiguration("dotnet_cache_query_organization", new QueryEntity(typeof(int), typeof(Organization))));
То при подключении в FastReport к уже готовому экземпляру Apache Ignite, список полей будет включать только те поля из класса Organization, которые помечены атрибутом [QuerySqlField].
Однако, при просмотре данных будут отображаться все поля из кэша:
Создание кэша без QueryEntity
Если кэш на стадии настройки создан без использования QueryEntity, то типы данных всех полей будут определены как string. Пример кода:
ICacheClient<int, Organization> cache = ignite.GetCache<int, Organization>("dotnet_cache_put_get");
В списке полей будут отображаться все доступные поля, независимо от наличия атрибута [QuerySqlField]. Это второй способ создания кэша.
Работа с кэшами, созданными как SQL-таблицы
Рассмотрим наконец и третий способ работы с кэшами. Перед вами пример создания и заполнения кэша как SQL-таблицы:
cache.Query(new SqlFieldsQuery(
"CREATE TABLE IF NOT EXISTS city (id LONG PRIMARY KEY, name VARCHAR) WITH \"template=replicated\"")).GetAll();
const string addCity = "INSERT INTO city (id, name) VALUES (?, ?)";
cache.Query(new SqlFieldsQuery(addCity, 1L, "Forest Hill"));
cache.Query(new SqlFieldsQuery(addCity, 2L, "Denver"));
cache.Query(new SqlFieldsQuery(addCity, 3L, "St. Petersburg"));
Для таких кэшей метаданные (QueryEntity) содержат информацию о типах данных для каждого поля.
В кэше Apache Ignite могут храниться данные, у которых отсутствуют явно заданные имена полей. Например:
var cache = ignite.GetOrCreateCache<int, object>("put-get-example");
int key = 1;
var val = new Address("1545 Jackson Street", 94612);
cache.Put(key, val);
int key1 = 2;
var val1 = 942.28956;
cache.Put(key1, val1);
int key2 = 3;
var val2 = "test String";
cache.Put(key2, val2);
При подключении в FastReport к экземпляру Apache Ignite (с кодом из примера выше) вы увидите следующий результат.
В этом примере:
Поля Street и Zip из пользовательского класса Address имеют имена, так как они определены в структуре класса.
Значения, такие как число 942.28956 или строка "test String", не имеют имен, поскольку они добавлены в кэш как простые объекты типа "ключ-значение".
Для полей, у которых отсутствует имя, генерируются уникальные идентификаторы.
Заключение
Мы рассмотрели, как настроить подключение к Apache Ignite в FastReport .NET. Следуя представленным шагам, вы сможете интегрировать эти системы и использовать все возможности Apache Ignite в качестве источника данных для отчетов.
Apache Ignite обеспечивает быстрый доступ к данным и их обработку, а FastReport .NET позволяет создавать мощные отчеты. Их интеграция открывает новые горизонты для анализа и визуализации данных.
Надеемся, что эта статья была полезной и поможет вам эффективно использовать Apache Ignite в ваших проектах с FastReport .NET.