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

介紹

在本系列的第一篇文章中,安裝了Node.js、Ignite的Node.js瘦客戶端包,而且測試了一個示例應用。在本文中,能夠看一下Ignite在處理其它數據源(好比關係數據庫)的已有數據時,一個頗有用的場景。html

一般在行業領域,不少系統還有着巨大的商業價值,它們必須獲得維護甚至增強,未被開發的領域已經不多見了。而Ignite能夠用於組織中的遺留系統或傳統系統,以增長它們的價值並提供新的可能性,例如具備水平可擴展性的集羣計算、顯著的內存級性能優點以及使用機器和深度學習的新應用等等。java

具體能夠看一個示例,其中在關係數據庫中已經有了一些數據,而後瞭解Ignite如何將該數據緩存到內存中,對該內存數據執行SQL操做並將更改回寫關係數據庫,這裏將使用一些Node.js代碼來訪問Ignite並執行一些SQL查詢。node

已有的數據庫系統

本文中使用了MySQL,而且其中已經準備好了一個名爲world的數據庫,裏面已經加載了部分數據。mysql

這個world數據庫的結構爲有三張關係表,具體以下:git

  • country:表明世界上的國家(239行數據);
  • city:表明國家的部分城市信息(4079行數據);
  • countrylanguage:各個國家說的語言(984行數據)。

接下來,確認MySQL是否已經成功啓動,並接受外部鏈接。github

Web控制檯和Web代理

爲了訪問MySQL數據庫的模式信息,須要使用Ignite的Web控制檯,在本文中爲了方便,使用的是GridGain託管的服務,不過Web控制檯的源代碼是能夠下載的,能夠在本地構建而後在公司的防火牆後面運行,具體細節能夠參見相關的文檔web

還須要一個Web代理,它能夠從Web控制檯中下載,以下圖所示:sql

圖1:下載Web代理

Web代理的zip包下載完成以後,能夠解壓該文件,目錄結構大體以下圖所示:數據庫

圖2:Web代理的目錄結構

注意這裏有個名爲jdbc-drivers的目錄,由於本例須要訪問MySQL,因此須要下載MySQL的驅動,而後將jar文件放在該文件夾中,以下圖所示:編程

圖3:MySQL的JDBC驅動

下面從終端窗口中啓動Web代理,以下:

./ignite-web-agent.sh

輸出大體以下圖所示:

圖4:啓動Web代理

從MySQL中導入模式

下面就能夠導入模式信息了,在Web控制檯的Configuration頁面中,右上角有一個Import from Database按鈕,以下圖所示:

圖5:從數據庫導入

點擊該按鈕以後,輸出大體以下圖所示:

圖6:從數據庫導入

在這個界面中,須要輸入MySQL服務器的JDBC URLUserPassword,大體以下圖所示:

圖7:從數據庫導入

填完以後點擊Next,這時就會看到各個數據庫模式,而後把除了world模式以外的都取消掉,以下圖所示:

圖8:從數據庫導入

選好以後,點擊Next,就會看到3張表,以下圖所示:

圖9:從數據庫導入

對於本文來講,這頁面中的默認值就能夠了,而後點擊Next,這會跳到以下圖所示的頁面:

圖10:從數據庫導入

對於本文來講,這個頁面的默認值就能夠,而後點擊Save

接下來在Configuration頁面,能夠看到列出了一個新的名爲ImportedCluster配置項,以下圖所示:

圖11:ImportedCluster

爲了知足業務需求,這個配置是能夠修改的。

修改配置

若是點擊上圖中的ImportedCluster,就會跳轉到下面的頁面:

圖12:基本集羣配置

這個界面中有兩個選項卡:BasicAdvanced

Basic選項卡中,集羣的配置名(第一步),若是往下滾動,Ignite存儲的名字(第二步),還有其它的若干個參數,均可以修改,在本例中,會維持這個頁面中的默認值。

Advanced選項卡中,還有其它的子項,包括ClusterSQL SchemeCachesIGFSGridGain,以下圖所示,若是須要,這裏面的不少參數均可以微調:

圖13:高級集羣配置

這裏選擇SQL Scheme選項卡,選中City這一行,以下圖所示,而後向下滾動並展開Domain model for SQL query部分:

圖14:SQL Scheme

這裏有一個indexes子項,值爲CountryCode,若是點擊它,能夠進行修改,以下圖所示:

圖15:CountryCode索引

這裏將索引名改成idx_country_code,而後點擊Save按鈕。接下來爲Countrylanguage重複前圖和上圖的過程,將索引名改成idx_lang_country_code 以後保存更改,作這些修改,能夠確保索引名在整個Ignite模式中是惟一的。

下面選擇Caches選項卡,首先選擇CityCache,以下圖所示,而後往下滾動並展開Queries & Indexing部分:

圖16:Caches

Queries & Indexing中,有一個值爲空名爲SQL schema name的字段,在這裏輸入PUBLIC後保存變動,而後爲CountryCacheCountrylanguageCache重複這個過程。

最後,返回到Configuration頁面,選中ImportedCluster而後在Actions下拉框中下載這個工程,以下圖所示:

圖17:下載工程

這時會保存一個名爲ImportedCluster-project.zip的文件,解壓這個文件以後就能夠在IDE中經過讀取其中的pom.xml文件建立一個新的工程,以下圖所示:

圖18:在IDE中加載工程

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

圖19:secret.properties

這裏須要填入以前使用的JDBC URLUsernamePassword,而後保存修改。

工程從新構建以後,就能夠啓動一個Ignite服務端節點,以下圖所示:

圖20:ServerNodeCodeStartup

接下來,經過運行LoadCaches,能夠把MySQL中的數據加載進Ignite存儲,以下圖所示:

圖21:LoadCaches

在Web控制檯中,轉到Monitoring > Dashboard > Caches,能夠看到Ignite存儲已經建立而且數據也已經成功加載,以下圖所示:

圖22:Monitoring > Dashboard > Caches

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:更新國家名稱

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

Q4:恢復國家名稱

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

Q1的輸出以下圖所示:

圖23:Q1輸出

Q2比Q1複雜些,包含了兩個表的關聯,Q2的輸出大體以下圖所示:

圖24:Q2輸出

Q3執行了一個更新操做,Q3執行完以後,Ignite的緩存會被更新,而且更新會被回寫到MySQL中,保持二者之間的同步。可使用DBeaver確認一下,首先在Country表中找到值爲United States的行,以下圖所示:

圖25:Country表

Q3執行完以後刷新一下DBeaver,能夠看到Name字段的值已經變爲USA,以下圖所示:

圖26:Country表

Q4恢復了原來的值,經過執行這個SQL而後刷新一下DBeaver能夠進行驗證,以下圖所示:

圖27:Country表

下一步

經過修改和調整Ignite附帶的示例,能夠進一步測試Node.js瘦客戶端。此外,Web控制檯提供了許多選項,可用於從現有數據庫系統微調和調整模式信息,具體能夠參見Web控制檯的相關文檔。

總結

在本文中,瞭解瞭如何從現有的MySQL數據庫系統中獲取模式信息並建立一個Ignite工程。這個Ignite工程可以將數據從MySQL服務器複製到Ignite存儲,而後在該數據中執行查詢。從規模上看,Ignite能夠利用集羣計算的強大功能使操做並行化,在內存中快速執行查詢並進行分析,甚至機器和深度學習,同時還保留現有系統的商業價值。雖然在本示例中使用了Node.js瘦客戶端,不過Ignite還支持其它編程語言的瘦客戶端

相關文章
相關標籤/搜索