在既有系统中打通Apache Ignite、MySQL和Node.js

640?wx_fmt=jpeg本文由公众号EAWorld翻译发表,转载需注明出处。


作者:Akmal B. Chaudhri

译者:李玉珏 

原题:Using 'No Rip and Replace' with Apache® Ignite™, MySQL and Node.js

原文:http://t.cn/Efatkx6

全文3769字,阅读约需要8分钟

介绍:


在本文中,可以看一下Ignite在处理其它数据源(比如关系数据库)的已有数据时,一个很有用的场景。

通常在行业领域,很多系统还有着巨大的商业价值,它们必须得到维护甚至加强,未被开发的领域已经很少见了。而Ignite可以用于组织中的遗留系统或传统系统,以增加它们的价值并提供新的可能性,例如具有水平可扩展性的集群计算、显著的内存级性能优势以及使用机器和深度学习的新应用等等。

具体可以看一个示例,其中在关系数据库中已经有了一些数据,然后了解Ignite如何将该数据缓存到内存中,对该内存数据执行SQL操作并将更改回写关系数据库,这里将使用一些Node.js代码来访问Ignite并执行一些SQL查询。


一、已有的数据库系统


本文中使用了MySQL,并且其中已经准备好了一个名为world的数据库,里面已经加载了部分数据。


这个world数据库的结构为有三张关系表,具体如下:


  • country:代表世界上的国家(239行数据);

  • city:代表国家的部分城市信息(4079行数据);

  • countrylanguage:各个国家说的语言(984行数据)。


接下来,确认MySQL是否已经成功启动,并接受外部连接。


二、Web控制台和Web代理


为了访问MySQL数据库的模式信息,需要使用Ignite的Web控制台,在本文中为了方便,使用的是GridGain托管的服务,不过Web控制台的源代码是可以下载的,可以在本地构建然后在公司的防火墙后面运行,具体细节可以参见相关的文档。


还需要一个Web代理,它可以从Web控制台中下载,如下图所示:


640?wx_fmt=png


Web代理的zip包下载完成之后,可以解压该文件,目录结构大致如下图所示:


640?wx_fmt=png


注意这里有个名为jdbc-drivers的目录,因为本例需要访问MySQL,所以需要下载MySQL的驱动,然后将jar文件放在该文件夹中,如下图所示:


640?wx_fmt=png


下面从终端窗口中启动Web代理,如下:


 
 
./ignite-web-agent.sh


输出大致如下图所示:


640?wx_fmt=png

三、从MySQL中导入模式


下面就可以导入模式信息了,在Web控制台的Configuration页面中,右上角有一个Import from Database按钮,如下图所示:


640?wx_fmt=png


点击该按钮之后,输出大致如下图所示:


640?wx_fmt=png


在这个界面中,需要输入MySQL服务器的JDBC URL、User和Password,大致如下图所示:


640?wx_fmt=png


填完之后点击Next,这时就会看到各个数据库模式,然后把除了world模式之外的都取消掉,如下图所示:


640?wx_fmt=png


选好之后,点击Next,就会看到3张表,如下图所示:


640?wx_fmt=png


对于本文来说,这页面中的默认值就可以了,然后点击Next,这会跳到如下图所示的页面:


640?wx_fmt=png


对于本文来说,这个页面的默认值就可以,然后点击Save


接下来在Configuration页面,可以看到列出了一个新的名为ImportedCluster配置项,如下图所示:


640?wx_fmt=png


为了满足业务需求,这个配置是可以修改的。


四、修改配置


如果点击上图中的ImportedCluster,就会跳转到下面的页面:


640?wx_fmt=png


这个界面中有两个选项卡:BasicAdvanced


Basic选项卡中,集群的配置名(第一步),如果往下滚动,Ignite存储的名字(第二步),还有其它的若干个参数,都可以修改,在本例中,会维持这个页面中的默认值。


Advanced选项卡中,还有其它的子项,包括ClusterSQL SchemeCachesIGFSGridGain,如下图所示,如果需要,这里面的很多参数都可以微调:


640?wx_fmt=png


这里选择SQL Scheme选项卡,选中City这一行,如下图所示,然后向下滚动并展开Domain model for SQL query部分:


640?wx_fmt=png


这里有一个indexes子项,值为CountryCode,如果点击它,可以进行修改,如下图所示:


640?wx_fmt=png


这里将索引名改为idx_country_code,然后点击Save按钮。接下来为Countrylanguage重复前图和上图的过程,将索引名改为idx_lang_country_code之后保存更改,做这些修改,可以确保索引名在整个Ignite模式中是唯一的。


下面选择Caches选项卡,首先选择CityCache,如下图所示,然后往下滚动并展开Queries & Indexing部分:


640?wx_fmt=png


Queries & Indexing中,有一个值为空名为SQL schema name的字段,在这里输入PUBLIC后保存变更,然后为CountryCache和CountrylanguageCache重复这个过程。


最后,返回到Configuration页面,选中ImportedCluster然后在Actions下拉框中下载这个工程,如下图所示:


640?wx_fmt=png


这时会保存一个名为ImportedCluster-project.zip的文件,解压这个文件之后就可以在IDE中通过读取其中的pom.xml文件创建一个新的工程,如下图所示:


640?wx_fmt=png


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的文件,如下图所示:


640?wx_fmt=png


这里需要填入之前使用的JDBC URLUsernamePassword,然后保存修改。


工程重新构建之后,就可以启动一个Ignite服务端节点,如下图所示:


640?wx_fmt=png


接下来,通过运行LoadCaches,可以把MySQL中的数据加载进Ignite存储,如下图所示:


640?wx_fmt=png


在Web控制台中,转到Monitoring > Dashboard > Caches,可以看到Ignite存储已经创建并且数据也已经成功加载,如下图所示:


640?wx_fmt=png


Ignite现在已经运行起来,创建了存储并且从MySQL中加载了数据,这时就可以通过任意数量不同的接口接入Ignite,不过本文会使用Node.js瘦客户端。


五、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 countryGROUP BY name, populationORDER BY max_popDESC LIMIT 3


Q2:US、RUS和CHN中3个人口最多的城市


 
 
SELECT country.name, city.name, MAX(city.population)AS max_pop FROM countryJOIN city ON city.countrycode = country.codeWHERE country.code IN ('USA','RUS','CHN')GROUP BY country.name, city.nameORDER BY max_popDESC LIMIT 3


Q3:更新国家名称


 
 
UPDATE countrySET name = 'USA'WHERE name = 'United States'


Q4:恢复国家名称


 
 
UPDATE countrySET name = 'United States'WHERE name = 'USA'


Q1的输出如下图所示:


640?wx_fmt=png


Q2比Q1复杂些,包含了两个表的关联,Q2的输出大致如下图所示:


640?wx_fmt=png


Q3执行了一个更新操作,Q3执行完之后,Ignite的缓存会被更新,并且更新会被回写到MySQL中,保持两者之间的同步。可以使用DBeaver确认一下,首先在Country表中找到值为United States的行,如下图所示:


640?wx_fmt=png


Q3执行完之后刷新一下DBeaver,可以看到Name字段的值已经变为USA,如下图所示:


640?wx_fmt=png


Q4恢复了原来的值,通过执行这个SQL然后刷新一下DBeaver可以进行验证,如下图所示:


640?wx_fmt=png


六、下一步


通过修改和调整Ignite附带的示例,可以进一步测试Node.js瘦客户端。此外,Web控制台提供了许多选项,可用于从现有数据库系统微调和调整模式信息,具体可以参见Web控制台的相关文档。


七、总结


在本文中,了解了如何从现有的MySQL数据库系统中获取模式信息并创建一个Ignite工程。这个Ignite工程能够将数据从MySQL服务器复制到Ignite存储,然后在该数据中执行查询。从规模上看,Ignite可以利用集群计算的强大功能使操作并行化,在内存中快速执行查询并进行分析,甚至机器和深度学习,同时还保留现有系统的商业价值。虽然在本示例中使用了Node.js瘦客户端,不过Ignite还支持其它编程语言的瘦客户端。




640?wx_fmt=png关于作者:李玉珏,大连理工大学毕业,架构师,创业者,有丰富的架构设计和技术研发团队管理经验,有众多行业领域企业级软件的从业经历,社区技术翻译作者以及撰稿人,开源技术贡献者。Apache Ignite 技术中文文档翻译作者,长期在国内进行 Ignite 技术的推广/技术支持/咨询工作。


640?wx_fmt=jpeg关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享,长按二维码关注


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值