您好,登錄后才能下訂單哦!
本篇內容介紹了“Ignite和Hazelcast有哪些區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
Apache Ignite 內存數據組織框架是一個高性能、集成化和分布式的內存計算和事務平臺,用于大規模的數據集處理,比傳統的基于磁盤或閃存的技術具有更高的性能,同時他還為應用和不同的數據源之間提供高性能、分布式內存中數據組織管理的功能。
Ignite來源于尼基塔·伊萬諾夫于2007年創建的GridGain系統公司開發的GridGain軟件,尼基塔領導公司開發了領先的分布式內存片內數據處理技術-領先的Java內存片內計算平臺,今天在全世界每10秒它就會啟動運行一次。他有超過20年的軟件應用開發經驗,創建了HPC和中間件平臺,并在一些創業公司和知名企業都做出過貢獻,包括Adaptec, Visa和BEA Systems。尼基塔也是使用Java技術作為服務器端開發應用的先驅者,1996年他在為歐洲大型系統做集成工作時他就進行了相關實踐。
2014年3月,GridGain公司將該軟件90%以上的功能和代碼開源,僅在商業版中保留了高端企業級功能,如安全性,數據中心復制,先進的管理和監控等。2015年1月,GridGain通過Apache 2.0許可進入Apache的孵化器進行孵化,很快就于8月25日畢業并且成為Apache的頂級項目,9月28日即發布了1.4.0版,2016年1月初發布了1.5.0版,應該說發展、迭代速度非常快。該技術相關資料較少,但確是一個很有潛力的技術,解決了大規模、大數據量、高并發企業級或者互聯網應用面臨的若干痛點。
Ignite和Hadoop解決的是不同的問題,即使在一定程度上可能應用了類似的底層基礎技術。Ignite是一種多用途,和OLAP/ OLTP內存中數據結構相關的,而Hadoop僅僅是Ignite原生支持(和加速)的諸多數據來源之一。
Spark是一個和Ignite類似的項目。但是Spark聚焦于OLAP,而Ignite憑借強大的事務處理能力在混合型的OLTP/ OLAP場景中表現更好。特別是針對Hadoop,Ignite將為現有的Map/Reduce,Pig或Hive作業提供即插即用式的加速,避免了推倒重來的做法,而Spark需要先做數據ETL,更適合新寫的分析應用。
在Ignite以前,大規模、大數據量、高并發企業級或者互聯網應用為了解決數據緩存、降低數據庫負載、提高查詢性能等突出問題,很多采用了Hazelcast或者Oracle Coherence或者GemFire(比如12306網站)或者目前應用越來越廣泛的Redis等緩存技術,本文對這些相關的技術做了簡單的比較,基本內容來源于其官方網站,進行了翻譯整理,方便更多的人了解他。
Apache Ignite和Hazelcast都提供了富數據網格的特性,解決了可擴展的分布式集群環境下在內存中對數據進行緩存和分區的問題。
Ignite和Hazelcast在緩存的方式上是有很多不同的,同時支持事務和數據的查詢,下面的表格列出了一些主要的不同點,這些都是我們在選擇內存數據網格產品時需要特別關注的。
序號 | 對比項目 | Apache ignite | Hazelcast |
---|---|---|---|
1 | 聚焦于開源 | Ignite還在不斷增加和增強開源版本的功能集,最新的主版本還增加了對C++以及.Net/C#的支持,和Node.js的集成也會很快到來,而且還增加了更快的無死鎖事務。 | Hazelcast的開發聚焦于收費的企業版中,比如堆外存儲以及持續查詢等的特性只在收費版中才提供,SSL加密的功能已經從開源版中刪除,只在收費版中提供。 |
2 | JCache(JSR107) | Ignite完全兼容JCache (JSR 107)緩存規范 | Hazelcast完全兼容JCache (JSR 107)緩存規范 |
3 | 堆外存儲 | Ignite根據用戶配置支持將數據存儲在堆內或者堆外 | Hazelcast僅在商業版中提供堆外存儲的功能 |
4 | 堆外索引 | 只要配置了堆外存儲,Ignite就會在堆外存儲索引(為了不影響使用堆內內存的用戶應用。) | 不支持 |
5 | 持續查詢 | Ignite支持容錯的持續查詢,即允許客戶端和服務器端訂閱數據變化的持續通知 | Hazelcast僅在商業(收費)版中提供持續查詢的功能。 |
6 | SSL加密 | Ignite支持SSL/TLS加密,即允許所有的客戶端和服務端通過加密的SSL或者TLS協議進行通信。 | Hazelcast將SSL加密支持從開源版中刪除,目前僅在商業(收費)版中支持該功能。 |
7 | SQL查詢 | Ignite支持完整的SQL(ANSI-99)語法以查詢內存中的數據 | Hazelcast僅對SQL提供有限的支持(只有幾個關鍵字) |
8 | 關聯查詢 | Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,比如:select * from A a, B b where a.b_id = b.id | Hazelcast不支持任何的關聯查詢,不管用不用SQL,如果需要,開發者需要手工處理多個查詢的結果。 |
9 | 查詢一致性 | Ignite提供完整的查詢一致性,即查詢是在一個特定的快照中執行的,查詢開始之后的數據更新不影響查詢的結果。 | Hazelcast查詢是不一致的,可能查詢結果的一部分將看到某些更新,而另一部分則不會。 |
10 | 查詢容錯 | Ignite查詢是容錯的,即查詢結果始終是一致的不會受到集群拓撲發生變化的影響,比如節點的加入,退出或崩潰。 | Hazelcast查詢是不容錯的,即查詢結果在集群拓撲發生變化時不一致,而數據正在后臺重新平衡。 |
11 | 數據一致性 | Ignite支持內存中數據的原子的和事務的一致性,不管數據存儲在分區或者復制緩存中。 | Hazelcast僅在分區緩存中支持原子的和事務的一致性,而存儲在復制緩存中的數據沒有任何事務一致性的保證。 |
12 | 無死鎖事務 | Ignite支持無死鎖樂觀事務,他不會獲得任何鎖,用戶也不用再擔心鎖順序,這樣的事務同時還提供了更好的性能。 | Hazelcast中必須注意按順序地更新數據以避免死鎖,這往往是不可能的,尤其是在大項目中。 |
13 | 事務化EntryProcessor | Ignite支持事務化EntryProcessor,他可以在服務端在一個事務中執行并置的業務代碼。 | 在Hazelcast中無法使用EntryProcessor或者在一個事務中執行業務代碼。 |
14 | Web會話集群化 | Ignite為所有已知的應用服務器提供Web會話的緩存和集群化支持。 | Hazelcast僅在商業(收費)版中提供Web會話集群化支持。 |
15 | 計算網格 | Ignite提供集群內的MapReduce、ForkJoin和基本的分布式lambda處理,包括作業的負載平衡,容錯,檢查點,計劃任務等。 | Hazelcast僅支持MapReduce和集群內的分布式隨機作業。 |
16 | 流式數據 | Ignite支持內存內的流處理,包括對流式數據的滑動窗口的查詢和維護支持。 | Hazelcast不對流處理提供任何的支持。 |
17 | 服務網格 | Ignite可以使用戶方便地將其服務集群化,包括支持各種集群單例。 | Hazelcast管理的服務不提供單例集群的功能。 |
18 | .Net/C#支持 | Ignite為.NET/C#用戶提供了完整的內存組織API,包括執行C#閉包,C#緩存,事務以及查詢API,原生C# CacheStore API等功能。 | Hazelcast只為.NET/C#提供了有限的客戶端API。 |
19 | C++支持 | Ignite為C++用戶提供了完整的內存組織API。 | Hazelcast只為C++提供了有限的客戶端API。 |
20 | Node.js支持 | Ignite將為Node.js用戶提供客戶端API支持。 | Hazelcast不支持Node.js。 |
Apache Ignite和Oracle Coherence都提供了富數據網格的特性,解決了可擴展的分布式集群環境下在內存中對數據進行緩存和分區的問題。
Ignite和Coherence在緩存和事務的方式上是有很多不同的,同時支持數據的查詢,下面的表格列出了一些主要的不同點,這些都是我們在選擇數據網格產品時需要特別關注的。
序號 | 對比項目 | Apache Ignite | Oracle Coherence |
---|---|---|---|
1 | 開源和閉源 | Ignite是一個Apache項目,并且還在不斷的增加和增強開源版的功能集,最新的主版本提供了對C++、.NET/C#的支持,對Node.js的支持也會很快到來。 | Coherence是一個Oracle的專有軟件,并不提供開源和免費的版本。 |
2 | JCache (JSR 107) | Ignite完全兼容JCache (JSR 107)緩存規范 | Coherence完全兼容JCache (JSR 107)緩存規范 |
3 | 堆外存儲 | Ignite根據用戶配置支持將數據存儲在堆內或者堆外 | Oracle Coherence對將數據存儲在堆外向開發者提供了有限的選項。 |
4 | 堆外索引 | 只要配置了堆外存儲,Ignite就會在堆外存儲索引(為了不影響使用堆內內存的用戶應用。) | 不支持 |
5 | SQL查詢 | Ignite支持完整的SQL(ANSI-99)語法以查詢查詢內存中的數據 | 不支持 |
6 | 關聯查詢 | Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,比如:select * from A a, B b where a.b_id = b.id | Coherence不支持任何的關聯查詢,不管用不用SQL,如果需要,開發者需要手工處理多個查詢的結果。 |
7 | ACID事務 | Ignite提供了每臺服務器每秒成千上萬事務的優異性能。 | Coherence因為性能低不建議使用事務。 |
8 | 分層存儲 | Ignite支持分層存儲模型,數據可以在堆內、堆外以及交換空間內存儲和移動,上層將提供更多的存儲能力,當然延遲也會增加。 | 不支持 |
9 | 流式數據 | Ignite提供內存內流計算,包括支持流式數據的滑動窗口的維護和查詢 | 不支持 |
10 | 配置 | Ignite支持通過Java Bean以及原生的Spring XML集成對系統進行配置,同時也支持通過代碼對系統進行方便配置的能力。 | Coherence通過專有的XML格式文件進行配置,不支持通過代碼進行配置。 |
Apache Ignite和Pivotal Gemfire都提供了富數據網格的特性,解決了可擴展的分布式集群環境下在內存中對數據進行緩存和分區的問題。
Ignite和Gemfire在緩存和事務的方式上是有很多不同的,同時支持數據的查詢,下面的表格列出了一些主要的不同點,這些都是我們在選擇數據網格產品時需要特別關注的。
序號 | 對比項目 | Apache Ignite | Pivotal Gemfire |
---|---|---|---|
1 | 開源和閉源 | Ignite是一個Apache項目,并且還在不斷的增加和增強開源版的功能集,最新的主版本提供了對C++、.NET/C#的支持,對Node.js的支持也會很快到來。 | Gemfire是Pivotal的專有軟件。 |
2 | JCache (JSR107) | Ignite數據網格是JCache(JSR107)規范的一個實現,該API為數據訪問提供了簡單易用、但是功能強大的API。 | Gemfire沒有實現JCache,使用專有的API。 |
3 | 堆內和堆外 | Ignite根據用戶配置支持將數據存儲在堆內和堆外。 | Gemfire不支持將數據存儲在堆外 |
4 | SQL查詢 | Ignite支持完整的SQL(ANSI-99) 查詢語法以查詢內存中的數據。 | Gemfire不支持標準的SQL語法,但是他提供了自己的叫做OQL的對象查詢語言。 |
5 | 關聯查詢 | Ignite支持完整的SQL關聯,包括跨多個緩存的關聯,比如:select * from A a, B b where a.b_id = b.id | Gemfire不支持任何的跨區或者跨緩存的關聯查詢,如果需要,開發者需要手工處理多個查詢的結果。 |
6 | 跨分區事務 | Ignite支持跨分區事務,事務可以在整個集群中緩存的所有分區中執行。 | Gemfire不支持跨越多個緩存分區或者節點的事務。 |
7 | 分層存儲 | Ignite支持分層存儲模型,數據可以在堆內、堆外以及交換空間內存儲和移動,上層將提供更多的存儲能力,當然延遲也會增加。 | 不支持 |
8 | 流式數據 | Ignite提供內存內流計算,包括支持流式數據的滑動窗口的維護和查詢 | 不支持 |
9 | 配置 | Ignite支持通過Java Bean以及原生的Spring XML集成對系統進行配置,同時也支持通過代碼對系統進行方便配置的能力。 | Gemfire通過專有的XML格式文件進行配置,不支持通過代碼進行配置。 |
10 | 部署 | Ignite節點是對等的,并且在啟動時自動加入集群(不需要任何locator服務器)。 | Gemfire需要啟動和維護一個locator服務器,以便控制節點的加入和退出。 |
Apache Ignite和Redis都提供了分布式緩存的功能,但是每個產品提供的功能特性是非常不同的。Redis主要是一個數據結構存儲,但是Ignite提供了很多內存內的分布式組件,包括數據網格、計算網格、流計算,當然也包括數據結構。
Ignite是一個內存數據組織,并且提供了更多的功能,無法進行一個一個對應功能特性的比較,但是我們仍然能對一些數據網格功能進行對比。
序號 | 對比項目 | Apache Ignite | Redis |
---|---|---|---|
1 | JCache (JSR 107) | Ignite完全兼容JCache(JSR107)緩存規范 | 不支持 |
2 | ACID事務 | Ignite完全支持ACID事務,包括樂觀和悲觀并發模型以及READ_COMMITTED, REPEATABLE_READ和SERIALIZABLE隔離級別。 | Redis提供了客戶端樂觀事務的有限支持,在并發更新情況下,客戶端需要手工重試事務。 |
3 | 數據分區 | Ignite支持分區緩存,類似于一個分布式哈希,集群中的每個節點都存儲數據的一部分,在拓撲發生變化的情況下,Ignite會自動進行數據的再平衡。 | Redis沒有提供分區,但是提供了副本的分片,使用分片非常死板,并且不管是客戶端還是服務端,每當拓撲發生變化時都需要一系列相當復雜的手工步驟。 |
4 | 全復制 | Ignite支持緩存的復制,集群中的每個節點的每個鍵值對都支持。 | Redis不提供對全復制的直接支持。 |
5 | 原生對象 | Ignite允許用戶使用自己的領域對象模型并且提供對任何Java/Scala, C++和.NET/C#數據類型(對象)的原生支持,用戶可以在Ignite緩存中輕易的存儲任何程序和領域對象。 | Redis不允許用戶使用自定義數據類型,僅支持預定義的基本數據結構集合,比如Set、List、Array以及一些其他的。 |
6 | 客戶端側(近)緩存 | Ignite提供對于最近訪問數據的客戶端側緩存的直接支持。 | 不支持 |
7 | (服務端側)并置處理 | Ignite支持在服務器端靠近數據以并置的方式直接執行任何Java, C++和.NET/C#代碼。 | Redis通常沒有任何并置處理的能力,服務器端基本只支持LUA腳本語言,服務器端不直接支持Java, .NET,或者C++代碼執行。 |
8 | SQL查詢 | Ignite支持完整SQL(ANSI-99)語法以查詢內存中的數據。 | Redis不支持任何查詢語言,只支持客戶端緩存API。 |
9 | 持續查詢 | Ignite提供對客戶端和服務器端持續查詢的支持,用戶可以設置服務器端的過濾器來減少和降低傳輸到客戶端的事件數量。 | Redis提供客戶端基于鍵的事件通知的支持,但是他不提供服務器端的過濾器,因此造成了在客戶端和服務器端中更新通知網絡流量的顯著增加。 |
10 | 數據庫集成 | Ignite可以自動集成外部的數據庫-RDBMS, NoSQL,和HDFS。 | Redis無法與外部數據庫集成。 |
“Ignite和Hazelcast有哪些區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。