久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Apache Ignite1.7有哪些新特性

153次閱讀
沒有評論

共計 2384 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章主要講解了“Apache Ignite1.7 有哪些新特性”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“Apache Ignite1.7 有哪些新特性”吧!

Apache Ignite 1.7 的新特性 - 非并置的分布式關聯

最近,Apache Ignite 發布了 1.7.0 版,在眾多的改變中,有一個眾多 Apache Ignite 用戶和客戶期待已久的殺手級特性 -SQL 查詢支持非并置的分布式關聯。本文會聚焦于這個特性,詳細描述非并置的分布式關聯是如何工作的以及它與傳統的(基于關系并置)Apache Ignite 關聯有何不同。

基于關系并置的關聯

以前,Apache Ignite 支持跨多個不同表的 SQL 關聯查詢,但是要求一個查詢中關聯的緩存數據要并置在一起。實際上在 Ignite 中,并置通過關系鍵可以非常方便地啟用,這時,一個業務實體的數據會與另一個相關業務實體的數據存儲于同一個節點。比如,假設有兩個業務實體,Organization 和 Person,并且一個 Organization 的 Id 會作為來自該 Organization 的 Person 的一個關系鍵。然后,Ignite 會確保將 Person 的所有數據存儲于他們所屬的 Organization 數據所在的節點上,這個簡單的概念可以執行一系列可以想象的兼容于 ANSI-99 的 SQL 查詢,包括多個緩存的關聯。基本上,一個使用關聯的 SQL 查詢與一個沒有關聯的 SQL 查詢的執行流程是絕對一致的。我們可以看一下一個很基本的查詢的執行流程,它使用 Organization 和 Person 業務實體通過如下方式定義:

Organization(id, address) 實體:這個 id 會作為 Organization 的 ID,它的值在將 Organization 注入緩存時會作為緩存鍵,這個用作緩存鍵的鍵在 Ignite 的 SQL 引擎層會被視為一個主鍵,這個概念會貫穿本文始終。

Person(name, salary) 實體:位于 Persons 緩存,會使用 AffinityKey(id, orgId) 作為緩存鍵,這里 AffinityKey 是 Ignite 中的一個特別的對象,他會定義一個 Person 的唯一 Id(第一個參數)以及他的關系鍵(第二個參數),這里,Organization ID(orgId)被選為一個 Person 的關系鍵,這意味著 Persons 數據會與他們所屬的 Organizations 的數據位于同一個節點上。

在定義這些業務實體以及預加載緩存數據之后,可以隨意執行一個像下面這樣的 SQL 查詢,因為 Person 與他們的 Organization 是關系并置的,Ignite 會確保返回一個完整的結果集。

SELECT * FROM Organization as org JOIN Person as p ON org.id = p.orgId

這個查詢的執行流程是這樣的:

查詢發起節點(mapper 和 reducer)會將查詢發給所有緩存數據的節點;

從 reducer 收到查詢的所有節點會在本地執行查詢,只會使用本地數據執行關聯;

這些節點會將結果集的一部分反饋給 reducer;

reducer 最后會匯總從所有遠程節點收到的結果集,然后向發起節點發送一個最終的聚合的結果。

非并置的分布式關聯

如果同樣的查詢執行在一個非關系并置的數據上,那么會得到一個不完整以及不一致的結果,原因是 Apache Ignite 在 1.7.0 之前的版本只會在本地數據上執行查詢(就像上述流程的第二步描述的那樣)。然而,在 Ignite 1.7.0 之后的版本不再是這樣的了,他會支持非并置的分布式關聯,這些關聯不再要求并置數據。現在,會使用 Person 的真實 Id 作為緩存鍵,替代 AffinityKey(id, orgId),然后將 orgId 字段加入 Person 對象的內部來執行這兩個緩存的關聯,即使這些發生了改變,仍然會得到一個完整的結果,不用管實際上 Person 的數據是否與他們的 Organization 數據并置在一起,這是因為最新版的 Ignite 會以如下的流程執行同樣的 SQL 查詢(上面提到的):

查詢發起節點(mapper 和 reducer)會將查詢發給所有緩存數據的節點;

從 reducer 收到查詢的所有節點會在本地執行查詢,但是使用本地數據和遠程節點的數據進行關聯(因為數據是全集群分布的);

這些節點會將結果集的一部分反饋給 reducer;

reducer 最后會匯總從所有遠程節點收到的結果集,然后向發起節點發送一個最終的聚合的結果。

這里需要注意的一個重要的事是,由于查詢的特殊性,一個節點會向集群發送廣播來請求在第二步中丟失的數據,然而,現在也有一種方式來優化,就是 SQL 引擎會為特定的關聯類型、典型的查詢將廣播切換為單播,下面的修改就會切換為單播模式:

SELECT * FROM Organization as org JOIN Person as p ON org._key = p.orgId

在這個查詢中,如果 SQL 引擎決定在 Persons 緩存加上 Organizations 上執行查詢,然后引擎會使用 org._key(s) 向存儲 Organizations 緩存的節點發送單播請求,這里_key 是 Ignite SQL 查詢中使用的一個特別的關鍵字,他會指向一個對象的緩存鍵 / 主鍵。基本上,因為引擎知道了它的緩存鍵 / 主鍵,會輕松地找到存儲條目的節點,用于多個緩存的關系鍵也是同樣的道理。

感謝各位的閱讀,以上就是“Apache Ignite1.7 有哪些新特性”的內容了,經過本文的學習后,相信大家對 Apache Ignite1.7 有哪些新特性這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2384字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 琼海市| 兰溪市| 定远县| 阳原县| 汾阳市| 甘泉县| 玉屏| 宁陵县| 扶余县| 含山县| 锡林郭勒盟| 堆龙德庆县| 固安县| 琼中| 长白| 青田县| 应用必备| 娱乐| 同江市| 玉林市| 基隆市| 集贤县| 巴彦淖尔市| 青冈县| 克拉玛依市| 鹤山市| 德令哈市| 丰顺县| 翁牛特旗| 博乐市| 微博| 泰安市| 綦江县| 讷河市| 克什克腾旗| 修文县| 鹤庆县| 南投县| 天全县| 巫山县| 临沭县|