Как настроить подключение к Apache Ignite в FastReport .NET

08.04.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-таблицы должен быть первичный ключ.

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

Особенности реализации Apache Ignite

 

Основное отличие между этими двумя представлениями данных заключается в методе доступа к ним. С помощью кэша ключ-значение можно работать с объектами, используя поддерживаемые языки программирования. 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». В появившемся окне укажите адрес(а) узлов, имя пользователя и пароль (при наличии).

Настройка подключения к 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].

Поля с атрибутом [QuerySqlField]

 

Однако, при просмотре данных будут отображаться все поля из кэша:

Отображение всех полей

 


 

Создание кэша без QueryEntity

Если кэш на стадии настройки создан без использования QueryEntity, то типы данных всех полей будут определены как string. Пример кода:

ICacheClient<int, Organization> cache = ignite.GetCache<int, Organization>("dotnet_cache_put_get");

В списке полей будут отображаться все доступные поля, независимо от наличия атрибута [QuerySqlField]. Это второй способ создания кэша.

Отображение всех доступных полей даже без атрибута [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) содержат информацию о типах данных для каждого поля. 

Список полей кэша City

Отображение данных из кэша City

 

В кэше 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.

.NET FastReport SQL База данных Отчет Плагин
8 апреля 2025

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx)

Конвертер из формата Microsoft Word (.docx) в файл для FastReport .NET (.frx): описание и инструкция по использованию инструмента.
25 марта 2025

Как объединить несколько отчетов в один из FastReport .NET

FastReport .NET — это мощный инструмент для создания и управления отчётами. В данной статье мы рассмотрим, как объединить несколько отчётов в один в FastReport .NET.
20 февраля 2025

Использование матричных принтеров для печати чеков

В этой статье мы рассмотрим, как интегрировать матричный принтер в процесс создания и вывода отчетов с использованием FastReport .NET.