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


在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 3Q3:更新国家名称
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 3Q4:恢复国家名称
UPDATE country SET name = 'United States' WHERE name = 'USA' Q1的输出如下图所示:
在既有系统中打通Apache Ignite、MySQL和Node.js

文章插图
 
Q2比Q1复杂些,包含了两个表的关联,Q2的输出大致如下图所示:
在既有系统中打通Apache Ignite、MySQL和Node.js


推荐阅读