Apache Ignite — это распределённая платформа in-memory computing, которая позволяет обрабатывать и хранить большие объёмы данных в оперативной памяти для достижения высокой производительности и масштабируемости.
В этой статье мы рассмотрим, как настроить подключение к Apache Ignite в FastReport .NET. Вы узнаете, какие шаги необходимо выполнить для подключения плагина через код и дизайнер отчетов. Следуя нашим рекомендациям, вы сможете эффективно использовать Apache Ignite в качестве источника данных для ваших отчетов в FastReport .NET.
Реализованный плагин для подключения к Apache Ignite представляет собой легковесное решение на базе Ignite.NET Thin Client.
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, который представляет модель данных организации. Этот класс содержит следующие свойства:
Полный код класса можно найти в папке:
..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Shared\Models
QueryEntity — это компонент Apache Ignite, который позволяет программно описать структуру данных (схему) для кэша и задать поля с их типами вручную.
Для кэшей с метаданными (QueryEntity) поддерживаются операции получения списка полей и их типов данных. Пользовательские типы данных обрабатываются следующим образом:
Например, если на стадии настройки кэш создан следующим образом:
var organizationCache = ignite.GetOrCreateCache<int, Organization>(
new CacheClientConfiguration("dotnet_cache_query_organization", new QueryEntity(typeof(int), typeof(Organization))));
То при подключении в FastReport к уже готовому экземпляру Apache Ignite, список полей будет включать только те поля из класса Organization, которые помечены атрибутом [QuerySqlField].
Однако, при просмотре данных будут отображаться все поля из кэша:
Если кэш на стадии настройки создан без использования QueryEntity, то типы данных всех полей будут определены как string. Пример кода:
ICacheClient<int, Organization> cache = ignite.GetCache<int, Organization>("dotnet_cache_put_get");
В списке полей будут отображаться все доступные поля, независимо от наличия атрибута [QuerySqlField]. Это второй способ создания кэша.
Рассмотрим наконец и третий способ работы с кэшами. Перед вами пример создания и заполнения кэша как 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 (с кодом из примера выше) вы увидите следующий результат.
В этом примере:
Для полей, у которых отсутствует имя, генерируются уникальные идентификаторы.
Мы рассмотрели, как настроить подключение к Apache Ignite в FastReport .NET. Следуя представленным шагам, вы сможете интегрировать эти системы и использовать все возможности Apache Ignite в качестве источника данных для отчетов.
Apache Ignite обеспечивает быстрый доступ к данным и их обработку, а FastReport .NET позволяет создавать мощные отчеты. Их интеграция открывает новые горизонты для анализа и визуализации данных.
Надеемся, что эта статья была полезной и поможет вам эффективно использовать Apache Ignite в ваших проектах с FastReport .NET.