使用ignite的一个常见思路就是将现有的关系型数据库中的数据导入到ignite中,然后直接使用ignite中的数据,相当于将ignite作为一个缓存服务,当然ignite的功能远不止于此,下面以将ignite集成进java服务的方式进行演示ignite的数据存储和查询相关的功能。由于个人习惯,示例演示没有使用测试代码,而是使用rest接口演示。
在讲数据加载之前,ignite中存储的几种模式(LOCAL, REPLICATED, PARTITIONED):
LOCAL:本地模式,数据都存储在本地,无数据再平衡,类似常见的存储服务;
PARTITIONED:分区模式,数据分散到集群中的各个节点,分区模式适合存储数量庞大的数据
如图所示是设置了Backup备份数的,默认备份数是0,如果分区模式下不设置备份数的话则会存在丢失数据的风险。
REPLICATED:复制模式,有数据再平衡过程,主节点(Primary)数据与分区模式的一致,只是复制模式默认备份了除主节点数据外的其余数据。复制模式适合存储数据量小,增长不快的数据。
分区模式和复制模式各有优点和缺点,具体选择要根据实际场景的特点去权衡:
这里使用查询MYSQL里的数据然后存入ignite,完整代码可以参考:
https://github.com/cording/ignite-example
为了演示,需要先在MYSQL中生成样本数据,相关sql脚本为,执行该SQL脚本即可完成表的创建和测试数据的初始化。
在配置文件中定义缓存
添加相关依赖
一般将数据导入ignite集群的方式是使用方法,但是当有大量的数据需要导入的时候,put的效率已经无法满足了,针对大量数据导入可以使用ignite的流处理器:
导入数据之后,可以在监控程序中看到数据存储情况:
流之所以能提高加载数据的速度,是因为流本质就是一个批处理。ignite是通过一致性哈希保证一致性的,每往集群中存入一条cache记录,ignite会先根据一致性哈希算法计算出这条cache映射到哪个节点,然后会将这条记录存储在该节点。而在流处理器中,流处理器会将映射到相同节点的数据批量存储到对应节点,这样会显著提升数据加载的效率。
最直接的查询缓存方式是使用方法,这种方式只能应对简单的key-value缓存,如果是设置了索引类型(indexedTypes),则缓存就会变成,这个时候就需要使用SQL方式查询,当使用SQL方式查询的时候,一般会有各种查询条件,这些查询条件对应的字段均需要预先设置索引。ignite里面有两种索引,一种是普通索引,一种是组合索引,要用到注解。而查询用到的api主要是和,前者是域查询,也就是查询部分字段结果集,而后者是普通查询。
所以,如果想使用SQL查询,就需要在加载数据之前在缓存定义中设置索引类型(indexedTypes),并对查询中可能用到的字段在对应实体类中相关属性添加注解,有必要的情况下还要设置索引。当定义缓存的时候设置了索引类型,则缓存不再是普通的KV形式的缓存了,而是具有数据库表的特性,这时候ignite就变成了分布式的内存数据库了,其sql相关功能是基于h2的sql引擎实现的。
1) 设置缓存索引类型
这里以long为主键,String为实体类作为示例:
使用即可设置索引
同样也是设置属性即可
2) 注解的三种用法
加上该注解后,字段才可以在语句中访问,这种形式不对该属性列创建索引。
其中name属性指定了组合索引的名字,order表示该字段在组合索引中的顺序。
该组合索引与普通数据库类似,同样遵循最左原则,即组合索引是否会用到会受到最左原则的限制。
3) 使用 SqlFieldsQuery进行域查询
SQL语法中有两个预定义字段和:
: 表示缓存中的所有键
: 表示缓存中的所有值对象
4) 使用进行普通查询
运行结果如下:
数据的并置主要是针对采用分区模式存储的数据,所谓的数据并置,就是提供一种约束,将相关连的数据存储在相同的网格节点上,这样在数据查询或者分布式计算的时候就不需要数据移动了,这样会提升整体的性能。
以下以X,Y,Z三个cache的并置作为示例,完整代码请查看示例工程。
其中X,Y,Z为三个分区模式的cache,Y与X并置,也就是说,Y的数据在存储的时候,会根据其属性,将数据存储在对应的X所在的节点上,同理,Z与Y并置,也就是将Z的数据存储在其YId属性对应的Y所在的节点上。以此形成一种约束,使得数据的分配可以人为控制。
要使用数据并置,就不得不提到一个API了,也就是,当一个cache与另外一个cache并置的时候,其cache的Key就得是类型了。
首先进行数据初始化:
而cache并置之后怎么校验并置是否成功呢?这就要用到的方法了,其作用是根据给定的key,找到存储该key的节点信息,具体使用方法如下:
执行之后,无异常抛出,在监控程序中查看一下存储情况:
会发现三个cache的数据分布完全一致,这与验证程序的结果(无异常抛出)保持一致,说明cache并置成功。
当数据并置成功后,就可以使用关联查询了,可以类比数据库中的多表联查:
执行结果如下:
如果是没有并置的缓存,在关联查询的时候就需要启用非并置的分布式关联:
以上就是本篇文章【apache ignite系列(三):数据处理(数据加载,数据并置,数据查询)】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/quote/3851.html 行业 资讯 企业新闻 行情 企业黄页 同类资讯 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多