您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

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

时间:2019-03-01 13:35:27  来源:  作者:
在既有系统中打通Apache Ignite、MySQL和Node.js

 

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

作者:Akmal B. Chaudhri

译者:李玉珏

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

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

介绍

在本文中,可以看一下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控制台中下载,如下图所示:

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

 

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

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

 

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

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

 

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

./ignite-web-agent.sh 

输出大致如下图所示:

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

 

从MySQL中导入模式

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

 

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

修改配置

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

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

 

这个界面中有两个选项卡:Basic和Advanced。

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

在Advanced选项卡中,还有其它的子项,包括Cluster、SQL Scheme、Caches、IGFS和GridGain,如下图所示,如果需要,这里面的很多参数都可以微调:

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

 

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

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

 

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

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

 

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

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

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

 

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

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

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

 

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

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

 

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

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

 

这里需要填入之前使用的JDBC URL、Username和Password,然后保存修改。

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

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

 

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

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

 

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

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

 

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 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:更新国家名称

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

Q4:恢复国家名称

UPDATE country 
SET name = 'United States' 
WHERE name = 'USA' 

Q1的输出如下图所示:

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

 

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

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

 

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

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

 

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

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

 

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

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

 

下一步

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

总结

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

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

 

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

关于EAWorld:微服务,DevOps,数据治理,移动架构原创技术分享



Tags:Apache   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
序言:习惯了用集成软件来安装php的运行环境,单独配置php、apache成为了部分程序员不愿意面对的问题,下面和我一块来复习一下,赶紧点赞收藏吧。 php官方下载地址https://windows....【详细内容】
2021-11-23  Tags: Apache  点击:(24)  评论:(0)  加入收藏
四 请求头和响应头还记得我们前面提到的上网流程吧?1 DNS解析,获取A记录,找到网站对应的IP地址2 三次握手三次握手之前服务器处在listen状态 建立完三次握手之后服务器处于esta...【详细内容】
2021-09-13  Tags: Apache  点击:(50)  评论:(0)  加入收藏
1. Apache HTTP Server地址: http://httpd.apache.org/download.cgi#apache242. APR 和 APR-Util地址: http://apr.apache.org/download.cgi3. PCRE地址: https://sourceforge....【详细内容】
2021-04-12  Tags: Apache  点击:(196)  评论:(0)  加入收藏
四个大型数据和数据湖的大型Apache系统,Apache Shardingsphere,Apache冰山,Apache Hudi和Apache IotdB 管理大数据所需的许多功能是其中一些是事务,数据突变,数据校正,流媒体支持,...【详细内容】
2021-03-09  Tags: Apache  点击:(242)  评论:(0)  加入收藏
Knoldus Inc.3分钟阅读嘿那里,作为一个技术人员有时我们必须编写数据库的查询,看起来不错,但我们不知道我们写的查询是句法正确的。所以在这个博客中,我们在Apache Calcite的帮...【详细内容】
2021-02-24  Tags: Apache  点击:(409)  评论:(0)  加入收藏
目前广为人知的Druid有两个,一个是阿里巴巴开源的Durid数据库连接池,一个是MetaMarkets开源的分布式、实时多维OLAP分析的数据处理系统。这篇文章将介绍后者,即Apache Druid。...【详细内容】
2021-01-12  Tags: Apache  点击:(280)  评论:(0)  加入收藏
正确的集成框架是绑定应用程序架构构建块的粘合剂。应用程序组件必须不断交换关键数据,以方便用户操作、服务扩展、威胁监视、后端操作、事件触发等。如果没有可靠的集成过...【详细内容】
2020-12-18  Tags: Apache  点击:(166)  评论:(0)  加入收藏
一、Apache Doris概览Apache Doris是一个现代化的MPP分析型数据库(OLAP)产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实时数据分析。Apache Doris的分布式架构非常简...【详细内容】
2020-12-03  Tags: Apache  点击:(374)  评论:(0)  加入收藏
Kylin术语Data Warehouse(数据仓库)数据仓库是一个各种数据(包括历史数据和当前数据)的中心存储系统,是BI( business intelligence ,商业智能)的核心部件。这里所谈的数据包括来自企...【详细内容】
2020-11-12  Tags: Apache  点击:(96)  评论:(0)  加入收藏
本文将从云原生时代的机遇和挑战说起,介绍一个全新的开源高性能云原生 API 网关&mdash;&mdash;Apache APISIX,探讨如何解决云原生时代 API 网关所面临的一些痛点,最后介绍该开...【详细内容】
2020-10-13  Tags: Apache  点击:(164)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条