
Apache Ignite 是一个分布式内存计算平台,能够在内存中处理和存储大量数据,以实现高性能和可扩展性。
在本文中,我们将探讨如何在FastReport .NET中配置与 Apache Ignite 的连接。您将学习通过代码和报表设计器连接插件的必要步骤。遵循我们的建议,您将能够有效地将 Apache Ignite 用作 FastReport .NET 中报表的数据源。
实现的连接 Apache Ignite 的插件是基于 Ignite.NET Thin Client 的轻量级解决方案。
Apache Ignite插件功能
- 连接到 Apache Ignite 集群:该插件允许您连接到集群中的一个或多个节点。节点地址以“host:port”格式指定,并以逗号分隔。
- 使用缓存:它支持以键值模式和 SQL 表的形式与缓存进行交互。
- 身份验证:如果在集群配置中启用了 authenticationEnabled 选项,则插件支持身份验证。
- 处理各种数据类型:该插件确保正确处理不同数据类型,包括自定义对象。
Apache Ignite 实现的特点
Ignite 提供了两种逻辑表示数据的方式:键值缓存和 SQL 表(模式)。尽管存在差异,但这些表示方式是等效的,并且可以反映相同的数据。
在 Ignite 中,SQL 表和键值缓存是表示相同内部数据结构的两种等效方式。可以通过键值 API、SQL 运算符或两者同时访问数据。
缓存是键值对的集合,可通过键值 API 访问。Ignite 中的 SQL 表类似于传统数据库管理系统中的表,但有一些额外的约束。例如,每个 SQL 表必须有一个主键。
具有主键的表可以表示为键值缓存,其中主键列充当键,表中的其他列是对象(值)的字段。

这两种数据表示形式之间的主要区别在于访问方式。使用键值缓存,您可以使用支持的编程语言处理对象。另一方面,SQL 表支持标准 SQL 语法,这在从现有数据库迁移数据等情况下非常有用。
如何在项目中连接插件
要使用该插件,您必须首先构建位于以下位置的项目: ..\Extras\Core\FastReport.Data\FastReport.Data.Ignite
。之后,需要注册该插件。注册有两种方式。
方法 1. 使用代码。
复制以下代码并将其粘贴到您的项目中。启动应用程序时只需执行一次即可。
FastReport.Utils.RegisteredObjects.AddConnection(typeof(IgniteDataConnection));
方法二、使用报表设计器。
在设计器中连接连接器,在Ribbon界面中进入“File|Settings...”菜单(或在标准界面中进入“View|Settings...”菜单),在打开的窗口中选择“Plugins”标签,添加插件的内置.dll,如下图所示。

添加插件后,需要重新启动FastReport .NET设计器。
如何在设计器中连接数据源
要创建与 Apache Ignite 的连接,请转到“数据”菜单并选择“添加数据源”。

在打开的窗口中,单击“新建连接”按钮,然后从连接类型的下拉列表中,选择“Apache Ignite 连接”选项。在出现的窗口中,指定节点的地址以及用户名和密码(如果需要)。

如果连接成功,下一步将显示上一步指定的节点所包含的表(缓存)列表:

使用插件中的缓存时的差异
该插件支持使用作为键值对和 SQL 表创建的缓存。
在 Apache Ignite 中创建和配置缓存的方法直接影响字段的组成和数据类型的表示。根据所选方法(例如,使用带有 [QuerySqlField] 属性的类、通过 QueryEntity 进行编程定义或使用动态数据),结果可能会有所不同。这涉及可用字段列表及其数据类型。
以下代码示例将使用来自官方 Apache Ignite 功能示例的代码片段。
让我们打开下载的档案并导航到以下文件夹:
..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Thin
从这些示例中,我们将使用自定义类 Organization,它表示组织的数据模型。此类包含以下属性:
- 名称:组织的名称。它标有 [QuerySqlField(IsIndexed = true)] 属性,允许它在 SQL 查询中使用,并创建索引以加快搜索速度。
- 地址:组织的地址,表示为 Address 类型的嵌套对象。由于 [QuerySqlField] 属性,这也可用于 SQL 查询。
- Type:组织的类型(例如商业或非营利组织),由枚举 OrganizationType 表示。
- LastUpdated:指示组织数据最后更新时间的时间戳。
该类的完整代码可以在以下文件夹中找到:
..\apache-ignite-2.17.0-bin\platforms\dotnet\examples\Shared\Models
使用 QueryEntity 创建缓存
QueryEntity 是一个 Apache Ignite 组件,它允许您以编程方式定义缓存的数据结构(模式)并手动指定字段及其类型。
对于带有元数据的缓存(QueryEntity),支持检索字段列表及其数据类型的操作。自定义数据类型按以下方式处理:
- 字段列表仅显示标有[QuerySqlField]属性的字段。
- 字段以 data_type.field_name 格式呈现。
例如,如果在设置过程中创建缓存,如下所示:
var organizationCache = ignite.GetOrCreateCache<int, Organization>( new CacheClientConfiguration("dotnet_cache_query_organization", new QueryEntity(typeof(int), typeof(Organization))));
然后,当连接到 FastReport 中已准备好的 Apache Ignite 实例时,字段列表将仅包含来自 Organization 类的标有 [QuerySqlField]属性的字段。
![具有 [QuerySqlField] 属性的字段 具有 [QuerySqlField] 属性的字段](https://fastreportsimages.s3.amazonaws.com/uploads/04.25/Apache-6.png)
但是,查看数据时,将显示缓存中的所有字段:

不使用 QueryEntity 创建缓存
如果在设置过程中创建缓存时未使用QueryEntity,则所有字段的数据类型将被定义为字符串。示例代码:
ICacheClient<int, Organization> cache = ignite.GetCache<int, Organization>("dotnet_cache_put_get");
在字段列表中,所有可用字段都会显示,无论是否存在[QuerySqlField]属性。这是创建缓存的第二种方法。
![即使没有 [QuerySqlField] 属性,也显示所有可用字段 即使没有 [QuerySqlField] 属性,也显示所有可用字段](https://fastreportsimages.s3.amazonaws.com/uploads/04.25/Apache-8.png)
使用以 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 实例(使用上面示例中的代码)时,您将看到以下结果。

在此示例中:
- 自定义类 Address 中的 Street 和 Zip 字段具有名称,因为它们是在类的结构中定义的。
- 诸如数字 942.28956 或字符串“测试字符串”之类的值没有名称,因为它们作为简单的键值对象添加到缓存中。
对于缺少名称的字段,将生成唯一标识符。

结论
我们已经介绍了如何在 FastReport .NET 中建立与 Apache Ignite 的连接。通过遵循概述的步骤,您将能够集成这些系统并充分利用 Apache Ignite 作为报告的数据源。
Apache Ignite 提供快速的数据访问和处理,而 FastReport .NET 则支持创建功能强大的报告。它们的集成为数据分析和可视化开辟了新的机会。
我们希望本文对您有所帮助,并帮助您在 FastReport .NET 项目中有效地使用 Apache Ignite。
_________________________________________________________
关于慧都科技:
慧都科技是专注软件工程、智能制造、石油工程三大行业的数字化解决方案服务商。在软件工程领域,我们提供开发控件、研发管理、代码开发、部署运维等软件开发全链路所需的产品,提供正版授权采购、技术选型、个性化维保等服务,帮助客户实现技术合规、降本增效与风险可控。慧都科技是FastReports的在中国区的合作伙伴,FastReports作为图表报表领域的优秀产品,帮助企业实现轻松构建高性能的表格及图表。
下载或体验FastReport产品,请联系在线客服咨询,或拨打产品热线:023-68661681
欢迎加入FastReport技术QQ群:1041260168,与更多小伙伴探讨报表开发技能。
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:FastReport控件中文网 [https://www.fastreportcn.com/]
本文地址:https://www.fastreportcn.com/post/3733.html