Ignite数据加载入门:功能介绍
本文是Ignite数据加载入门
系列文章的第一篇,会介绍开发人员、分析人员和运维人员可以使用的Ignite数据加载功能,在后面的两篇文章中,会介绍Ignite进行数据加载的两种主要技术:CacheStore和DateStreamer。
数据加载功能和Ignite的部署模式强相关,每个加载方式都有其优点和成本,这也使得用户在不同的场景会做出不同的选择。
Ignite的数据加载功能
Ignite提供了若干种功能,用于从外部数据源加载数据,下面会逐一介绍。
CacheStore
CacheStore是数据网格(IMDG)方案中用于与外部或第三方持久化存储进行同步的主要工具。Ignite的CacheStore接口实现了缓存的通读和通写功能,另外CacheStore接口还具有缓存加载
方法,可用于在初始化时热加载缓存(不仅限于在启动时执行)。API-Cache-CacheStore-DataStore关系的图形表示如下所示,突出显示了通读、通写和缓存加载功能:
Ignite自带了很多CacheStore接口的实现,可将Ignite缓存与外部数据源(如RDBMS、Hibernate、NoSQL系统(如Cassandra)和其他自定义第三方系统)进行同步。这些实现将确保从KeyValue或SQL API进行的所有创建(缓存put
新数据或SQL的INSERT
)或更新(缓存put
,SQL的UPDATE
)或删除(缓存remove
,SQL的DELETE
)操作都将同步到第三方系统,它还为从数据源进行缓存热加载提供了一种手段。
数据流
IgniteDataStreamer API和在此基础上构建的各种流处理器目的是将大量连续的数据注入Ignite中。数据流以可伸缩和容错的方式构建,并为注入Ignite的所有数据提供至少一次保证的语义。
针对很多既有的系统,Ignite自带了很多直接可以用的流处理器,比如Kafka、JMS、MQTT等等。
put/putAll/SQL INSERT API
通常应用与Ignite缓存/表进行交互的方式是缓存的put/putAll和SQL API,它们也适用于将数据注入到缓存中。虽然putAll API的速度明显快于多个puts的速度,但是要显著慢于IgniteDataStreamer
,因此通过这些API进行的数据加载通常用于增量数据加载。
SQL API通过其SET STREAMING [ON|OFF]选项支持集成流。这时SQL INSERTS将由JDBC/ODBC驱动进行批处理,并在整个集群节点集合中异步执行以实现最大吞吐量。
工具/应用
随着诸如JDBC/ODBC之类的通用接口的广泛使用,也会有更多的工具可用于数据加载。Ignite自带了SQLLine,支持通过COPY命令直接从文件加载数据:
其他ETL工具(例如Informatica和Talend)也是通过ODBC/JDBC进行数据加载的备选方案。
数据加载流程
当使用Ignite的原生客户端以及服务端API时,有两个主要的数据加载流程:
客户端将数据传输到服务端
在大多数场景中,这可以视为标准的数据加载流程。这时执行加载的代理访问并读取数据源,然后将其写入数据库(即Ignite服务端节点/集群),该流程的示意图如下:
在上图中,针对特定的数据源(在本例中为CSV文件)编写了一个Ignite客户端应用,名为LoadCachesFromCsv
,它知道如何访问和获取或接收数据,然后该应用还负责将数据写入或”装载“到集群中。在此数据加载流程中,可以使用任何Ignite写入API,put()
、putAll()
、SQL INSERT
等,但Ignite DataStreamer也适用于这个场景并且性能最好。
客户端通知服务端加载数据
另一种数据加载流程是客户端仅通知服务端加载数据的流程(也许带有参数,指示要从何处获取哪些数据),该流程的示意图如下所示:
如上所示,LoadCache
应用仅“启动”加载,但实际上的加载逻辑和数据移动发生在驻留CacheStore的集群节点上。
数据加载流程比较
在这两种加载流程(基于客户端的数据加载和通过客户端发出通知的服务端数据加载)中,可以看到在第一种模式中,客户端承担了相对于当前有效源数据的所有责任,比如上下文、数据访问、安全性、网络可见性等。这有其好处,因为只有客户端节点才需要访问数据,并且可以充当源系统和目标集群之间的代理,从而使集群免于直接外部访问。但是,当客户端执行加载时,它必须自己读取所有数据并写入集群(这可能还需要将数据重新分配给正确的目标节点)。
对于客户端只发出信号而服务端执行数据加载的方式,则可以利用服务端集群的功能和上下文。这时集群节点可能是网络中唯一配置了连接和安全参数以到达源数据的代理。另外如果数据和目标数据分区适合于并置加载,还可以按节点划分加载,每个节点仅加载归属该节点的分区的数据,这获得了巨大的可伸缩性优势(即每个节点都可以处理一部分,并可以水平扩展到所有节点),更多的细节请参见分区感知的数据加载文档。需要注意的是,如果无法进行分区感知加载,则存在数据读取IO的重复,因为每个节点将读取所有的数据并丢弃不属于本地节点的那些记录。
在本系列的后面两篇文章中,会针对CacheStore和IgniteDataStreamer这两种数据加载方式分别举例详细介绍。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
没内鬼,来点干货!SQL优化和诊断
SQL优化与诊断 Explain诊断 Explain各参数的含义如下: 列名 说明 id 执行编号,标识select所属的行。如果在语句中没有子查询或关联查询,只有唯一的select,每行都将显示1.否则,内层的select语句一般会顺序编号,对应于其在原始语句中的位置 select_type 显示本行是简单或复杂select,如果查询有任何复杂的子查询,则最外层标记为PRIMARY(DERIVED、UNION、UNION RESUIT) table 访问引用哪个表(引用某个查询,如“derived3”) type 数据访问/读取操作类型(All、index、range、ref、eq_ref、const/system、NULL) possible_key 揭示哪一些索引可能有利于高效的查找 key 显示mysql实际决定采用哪个索引来优化查询 key_len 显示mysql在索引里使用的字节数 ref 显示了之前的表在key列记录的索引中查找值所用的列或常量 rows 为了找到所需要的行而需要读取的行数,估算值 Extra 额外信息,如using index、filesort等 sel...
- 下一篇
使用网络摄像头和Python中的OpenCV构建运动检测器(Translate)
点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达 本期我们将学习如何使用OpenCV实现运动检测 运动检测是指检测物体相对于周围环境的位置是否发生了变化。接下来,让我们一起使用Python实现一个运动检测器应用程序吧! 该运动检测器可以完成以下任务: 1)在家工作时在屏幕前查找时间 2) 监控孩子在屏幕前的时间 3) 在你的后院发现非法侵入 4) 在你的房间/房子/小巷周围找到不需要的公共/动物活动……。 想要实现该运动检测器程序我们需要具备以下条件: 1)硬件要求:装有网络摄像机或任何类型摄像机的计算机。 2)软件需求:Pyhton3或者更高版本。 3)附加要求:对运动检测有一定的兴趣。 接下来我们将一步步的完成该应用程序的构建。 首先,我们将通过网络摄像头捕获第一帧,并将它视为基准帧,如下图所示。通过计算该基准帧中的对象与新帧对象之间的相位差来检测运动。我们也将得到的结果称为Delta帧。 接下来,我们将使用像素强度来优化Delta帧,优化后的帧称为阈值帧。并且,我们将应用一些复杂的图像处理技术,例如阴影消除、扩张轮廓等,以完成在阈值帧上提取对象物体。以下是...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装