在本系列的第一篇文章中,安裝了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還支持其它編程語言的瘦客戶端。