在本系列的第一篇文章中,安装了Node.js、Ignite的Node.js瘦客户端包,而且测试了一个示例应用。在本文中,能够看一下Ignite在处理其它数据源(好比关系数据库)的已有数据时,一个颇有用的场景。html
一般在行业领域,不少系统还有着巨大的商业价值,它们必须获得维护甚至增强,未被开发的领域已经不多见了。而Ignite能够用于组织中的遗留系统或传统系统,以增长它们的价值并提供新的可能性,例如具备水平可扩展性的集群计算、显著的内存级性能优点以及使用机器和深度学习的新应用等等。java
具体能够看一个示例,其中在关系数据库中已经有了一些数据,而后了解Ignite如何将该数据缓存到内存中,对该内存数据执行SQL操做并将更改回写关系数据库,这里将使用一些Node.js代码来访问Ignite并执行一些SQL查询。node
本文中使用了MySQL,而且其中已经准备好了一个名为world的数据库,里面已经加载了部分数据。mysql
这个world
数据库的结构为有三张关系表,具体以下:git
接下来,确认MySQL是否已经成功启动,并接受外部链接。github
为了访问MySQL数据库的模式信息,须要使用Ignite的Web控制台,在本文中为了方便,使用的是GridGain托管的服务,不过Web控制台的源代码是能够下载的,能够在本地构建而后在公司的防火墙后面运行,具体细节能够参见相关的文档。web
还须要一个Web代理,它能够从Web控制台中下载,以下图所示:sql
Web代理的zip包下载完成以后,能够解压该文件,目录结构大体以下图所示:数据库
注意这里有个名为jdbc-drivers
的目录,由于本例须要访问MySQL,因此须要下载MySQL的驱动,而后将jar文件放在该文件夹中,以下图所示:编程
下面从终端窗口中启动Web代理,以下:
./ignite-web-agent.sh
输出大体以下图所示:
下面就能够导入模式信息了,在Web控制台的Configuration
页面中,右上角有一个Import from Database
按钮,以下图所示:
点击该按钮以后,输出大体以下图所示:
在这个界面中,须要输入MySQL服务器的JDBC URL、User和Password,大体以下图所示:
填完以后点击Next
,这时就会看到各个数据库模式,而后把除了world
模式以外的都取消掉,以下图所示:
选好以后,点击Next
,就会看到3张表,以下图所示:
对于本文来讲,这页面中的默认值就能够了,而后点击Next
,这会跳到以下图所示的页面:
对于本文来讲,这个页面的默认值就能够,而后点击Save
:
接下来在Configuration
页面,能够看到列出了一个新的名为ImportedCluster
配置项,以下图所示:
为了知足业务需求,这个配置是能够修改的。
若是点击上图中的ImportedCluster
,就会跳转到下面的页面:
这个界面中有两个选项卡:Basic
和Advanced
。
在Basic
选项卡中,集群的配置名(第一步),若是往下滚动,Ignite存储的名字(第二步),还有其它的若干个参数,均可以修改,在本例中,会维持这个页面中的默认值。
在Advanced
选项卡中,还有其它的子项,包括Cluster
、SQL Scheme
、Caches
、IGFS
和GridGain
,以下图所示,若是须要,这里面的不少参数均可以微调:
这里选择SQL Scheme
选项卡,选中City
这一行,以下图所示,而后向下滚动并展开Domain model for SQL query
部分:
这里有一个indexes
子项,值为CountryCode
,若是点击它,能够进行修改,以下图所示:
这里将索引名改成idx_country_code
,而后点击Save
按钮。接下来为Countrylanguage
重复前图和上图的过程,将索引名改成idx_lang_country_code
以后保存更改,作这些修改,能够确保索引名在整个Ignite模式中是惟一的。
下面选择Caches
选项卡,首先选择CityCache
,以下图所示,而后往下滚动并展开Queries & Indexing
部分:
在Queries & Indexing
中,有一个值为空名为SQL schema name
的字段,在这里输入PUBLIC
后保存变动,而后为CountryCache
和CountrylanguageCache
重复这个过程。
最后,返回到Configuration
页面,选中ImportedCluster
而后在Actions
下拉框中下载这个工程,以下图所示:
这时会保存一个名为ImportedCluster-project.zip
的文件,解压这个文件以后就能够在IDE中经过读取其中的pom.xml
文件建立一个新的工程,以下图所示:
在pom.xml
文件中,在dependencies
下面,须要检查一下mysql-connector-java
依赖,若是缺失,须要加一下,以下所示:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.15</version> </dependency>
这里的版本号匹配了以前使用的JDBC驱动的版本号。
在这个工程中,在resources
文件夹下面,有一个名为secret.properties
的文件,以下图所示:
这里须要填入以前使用的JDBC URL
、Username
和Password
,而后保存修改。
工程从新构建以后,就能够启动一个Ignite服务端节点,以下图所示:
接下来,经过运行LoadCaches
,能够把MySQL中的数据加载进Ignite存储,以下图所示:
在Web控制台中,转到Monitoring
> Dashboard
> Caches
,能够看到Ignite存储已经建立而且数据也已经成功加载,以下图所示:
Ignite如今已经运行起来,建立了存储而且从MySQL中加载了数据,这时就能够经过任意数量不一样的接口接入Ignite,不过本文会使用Node.js瘦客户端。
使用Ignite提供的Node.js版本SQL示例做为模板,能够建立若干个Node.js应用,而后执行下表中列出的SQL查询,完整的Node.js应用代码能够参见GitHub,在下面的例子中,该Node.js应用在Ignite的Node.js示例文件夹中运行:
Q1:3我的口最多的国家
SELECT name, MAX(population) AS max_pop FROM country GROUP BY name, population ORDER BY max_pop DESC LIMIT 3
Q2:US、RUS和CHN中3我的口最多的城市
SELECT country.name, city.name, MAX(city.population) AS max_pop FROM country JOIN city ON city.countrycode = country.code WHERE country.code IN ('USA','RUS','CHN') GROUP BY country.name, city.name ORDER BY max_pop DESC LIMIT 3
Q3:更新国家名称
UPDATE country SET name = 'USA' WHERE name = 'United States'
Q4:恢复国家名称
UPDATE country SET name = 'United States' WHERE name = 'USA'
Q1的输出以下图所示:
Q2比Q1复杂些,包含了两个表的关联,Q2的输出大体以下图所示:
Q3执行了一个更新操做,Q3执行完以后,Ignite的缓存会被更新,而且更新会被回写到MySQL中,保持二者之间的同步。可使用DBeaver确认一下,首先在Country
表中找到值为United States
的行,以下图所示:
Q3执行完以后刷新一下DBeaver
,能够看到Name
字段的值已经变为USA
,以下图所示:
Q4恢复了原来的值,经过执行这个SQL而后刷新一下DBeaver能够进行验证,以下图所示:
经过修改和调整Ignite附带的示例,能够进一步测试Node.js瘦客户端。此外,Web控制台提供了许多选项,可用于从现有数据库系统微调和调整模式信息,具体能够参见Web控制台的相关文档。
在本文中,了解了如何从现有的MySQL数据库系统中获取模式信息并建立一个Ignite工程。这个Ignite工程可以将数据从MySQL服务器复制到Ignite存储,而后在该数据中执行查询。从规模上看,Ignite能够利用集群计算的强大功能使操做并行化,在内存中快速执行查询并进行分析,甚至机器和深度学习,同时还保留现有系统的商业价值。虽然在本示例中使用了Node.js瘦客户端,不过Ignite还支持其它编程语言的瘦客户端。