Apache Ignite本机持久性,简要概述
通過將數據的工作集放入系統內存中,內存中方法可以達到極高的速度。 當所有數據都保存在內存中后,處理使用傳統旋轉磁盤引起的問題的需求就消失了。 例如,這意味著無需維護數據的其他緩存副本并管理它們之間的同步。 但是這種方法還有一個缺點,因為數據僅在內存中,如果整個集群都終止了,數據將無法生存。 因此,根本不認為此類數據存儲具有持久性。
在這篇博客文章中,我將努力探索Apache Ignite的本機持久性新功能,并提供清晰易懂的圖片,說明Apache Ignite的本機持久性如何工作。
在大多數情況下,您不能(不應)將整個數據集存儲在應用程序的內存中,通常,您應該存儲相對較小的熱數據或活動數據子集,以提高應用程序的性能。 其余數據應存儲在低成本磁盤或磁帶中的某個位置以進行歸檔。 有兩種主要的內存數據庫存儲需求:
- 如果需要將內存數據庫重新加載到內存中,則永久介質可以存儲已提交的事務,從而保持持久性并用于恢復目的。
- 永久存儲,用于保存整個內存數據庫的備份副本。
永久性存儲或媒體可以是任何分布式或本地文件系統,SAN,NoSQL數據庫,甚至是RDBMS(例如Postgres或Oracle)。 Apache Ignite(從1.5版開始)提供了一種優雅的方式來連接持久性數據存儲(例如RDBMS或NoSQL DB,例如Mongo DB或Cassandra)。 RDBMS中的持久性通常是瓶頸,并且您永遠不會在系統中進行水平擴展。 有關更多信息,我建議您閱讀“ 使用Apache Ignite進行高性能內存計算 ”一書中的示例章節。
因此,從版本2.1.0開始 ,Apache Ignite提供了與ACID和SQL兼容的磁盤存儲,該磁盤存儲與Ignite的持久性內存透明集成,作為可選的磁盤層,用于存儲SSD,Flash,3D XPoint和其他類型的非易失性數據和索引倉庫。
Apache Ignite本機持久性使用新的持久性內存架構 ,該架構允許存儲和處理數據以及在內存中和磁盤上建立索引。 只要啟用該功能,Apache Ignite就會根據其容量將超數據集存儲在磁盤上,并將一部分數據存儲在RAM中。 如果RAM中缺少數據子集或索引,則耐用內存將從磁盤中取出數據,如下圖所示。
數據也可以存儲在中央磁盤存儲中,所有Ignite節點都連接在中央磁盤存儲中,如下所示。
在開始之前,讓我們在沙盒中介紹項目的先決條件:
安裝。
基本上有兩種使用Apache Ignite的方法:
- 下載二進制發行版,然后將歸檔文件解壓縮到操作系統中的某個位置,然后使用spring config文件運行./ignite.sh bash腳本。
- 使用所需的Apache Ignite依賴關系創建一個maven項目,通過Java代碼配置節點并運行它。
在這里,我將使用第一個選項。
步驟1。
- 下載 Apache Ignite二進制發行版,并將發行版解壓縮到沙箱中的某個位置。
- 修改IGNITE_HOME / examples / config / persistentstore / example-persistent-store.xml文件,并注釋高速緩存配置的以下部分。
請注意,要啟用Ignite本機持久性,只需傳遞以下配置(PersistentStoreConfiguration的實例),該配置已在example-persistent-store.XML文件中進行了預配置。
<property name="persistentStoreConfiguration"> <bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/> </property>- 從IGNITE_HOME目錄運行以下命令。
- 在pom.xml中添加以下依賴項
- 創建具有以下內容的Java類。
請注意,我們使用Ignite客戶端模式來處理數據。 運行HelloWorld應用程序后,應在緩存中插入100個元素(緩存名稱
testCache )。
第三步
- 讓我們使用ignitevisor命令工具檢查數據。 在ignitevisor命令工具中使用cache -scan命令。 您應該在控制臺中得到類似的插圖。 緩存中的所有100個元素。
- 現在,讓我們看看引擎蓋下發生了什么。
您應該在控制臺中得到如下所示的內容。
如果啟用Apache Ignite本機持久性,則Ignite將在所有群集節點上的內存和磁盤上持久存儲所有數據和索引。
如果要瀏覽目錄db / 0_0_0_0_0_0_0__10_211_55_2_10_37_129_2_127_0_0_1_192_168_1_37_47500(在我的情況下),則將為每個緩存找到單獨的文件夾。 名稱為cache-testCache的文件夾將包含我們剛剛插入的所有緩存條目(100個元素)。
文件index.bin是緩存條目的索引,每個緩存元素都獲取其各自的頁面文件。 為什么會這樣呢? 現在,Ignite體系結構是基于頁面的體系結構。 讓我們仔細看看,內存現在分為區域->區域分為段->段分為頁。 頁面可以交換到磁盤中。 頁面可以存儲:
- 數據
- 元數據
- 指數
頁面是固定長度的塊,它還支持自動碎片整理。 如果仔細看一下頁面大小,它們全都是14 KB。 每當Ignite需要從磁盤加載數據時,它只會加載頁面文件,因此速度非常快。
同樣,在預寫日志(WAL)上還有另一個概念。 如果進行更新,則首先將更新內存中的數據并將頁面標記為臟,然后將數據持久保存到預寫日志中。 點燃只是將更新附加到WAL文件中。 WAL文件與Cassandra commitlog文件非常相似,但有一個區別。 Cassandra將并行寫入內存和磁盤上的commitlog文件,另一方面,Ignite首先將數據更新到內存中,然后將數據附加到WAL中。 有關更多信息,我建議您看看
文檔 ,這是非常詳盡的。
第四步。
- 重新啟動Ignite節點,并檢查緩存
testCache與
點火器 。 您最終會感到驚訝,因為沒有數據進入緩存。
- 讓我們稍微修改一下helloworld類,然后再次運行該應用程序,注釋或刪除以下代碼片段,如下所示。
每當發生任何讀取請求時,Ignite首先都會將數據檢入內存。 如果內存中不存在該數據集,則Ignite立即從磁盤加載緩存條目并加載到內存中。 還要注意的是,所有條目都以堆的形式進入內存。
好處 。
使用Ignite本機持久性,現在您可以輕松地進行數據恢復備份,Denis Magda通過使用Ignite本機持久性撰寫了一篇有關數據恢復的綜合文章 。 我在這里必須提到的一件事是集群之間的數據復制。 通過使用Ignite本機持久性,現在您可以在線將數據從一個群集復制到另一個群集。 您可以使用任何基于磁盤的標準數據復制工具將已更改的數據集從主數據中心復制到備用數據中心或Ignite群集。
翻譯自: https://www.javacodegeeks.com/2017/09/apache-ignite-native-persistence-brief-overview.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Apache Ignite本机持久性,简要概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抗ddos产品报表不支持格式怎么办(抗d
- 下一篇: Java命令行界面(第23部分):Rop