日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Apache Ignite本机持久性,简要概述

發(fā)布時(shí)間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Apache Ignite本机持久性,简要概述 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

通過將數(shù)據(jù)的工作集放入系統(tǒng)內(nèi)存中,內(nèi)存中方法可以達(dá)到極高的速度。 當(dāng)所有數(shù)據(jù)都保存在內(nèi)存中后,處理使用傳統(tǒng)旋轉(zhuǎn)磁盤引起的問題的需求就消失了。 例如,這意味著無需維護(hù)數(shù)據(jù)的其他緩存副本并管理它們之間的同步。 但是這種方法還有一個(gè)缺點(diǎn),因?yàn)閿?shù)據(jù)僅在內(nèi)存中,如果整個(gè)集群都終止了,數(shù)據(jù)將無法生存。 因此,根本不認(rèn)為此類數(shù)據(jù)存儲(chǔ)具有持久性。

在這篇博客文章中,我將努力探索Apache Ignite的本機(jī)持久性新功能,并提供清晰易懂的圖片,說明Apache Ignite的本機(jī)持久性如何工作。

在大多數(shù)情況下,您不能(不應(yīng))將整個(gè)數(shù)據(jù)集存儲(chǔ)在應(yīng)用程序的內(nèi)存中,通常,您應(yīng)該存儲(chǔ)相對(duì)較小的熱數(shù)據(jù)或活動(dòng)數(shù)據(jù)子集,以提高應(yīng)用程序的性能。 其余數(shù)據(jù)應(yīng)存儲(chǔ)在低成本磁盤或磁帶中的某個(gè)位置以進(jìn)行歸檔。 有兩種主要的內(nèi)存數(shù)據(jù)庫(kù)存儲(chǔ)需求:

  • 如果需要將內(nèi)存數(shù)據(jù)庫(kù)重新加載到內(nèi)存中,則永久介質(zhì)可以存儲(chǔ)已提交的事務(wù),從而保持持久性并用于恢復(fù)目的。
  • 永久存儲(chǔ),用于保存整個(gè)內(nèi)存數(shù)據(jù)庫(kù)的備份副本。

永久性存儲(chǔ)或媒體可以是任何分布式或本地文件系統(tǒng),SAN,NoSQL數(shù)據(jù)庫(kù),甚至是RDBMS(例如Postgres或Oracle)。 Apache Ignite(從1.5版開始)提供了一種優(yōu)雅的方式來連接持久性數(shù)據(jù)存儲(chǔ)(例如RDBMS或NoSQL DB,例如Mongo DB或Cassandra)。 RDBMS中的持久性通常是瓶頸,并且您永遠(yuǎn)不會(huì)在系統(tǒng)中進(jìn)行水平擴(kuò)展。 有關(guān)更多信息,我建議您閱讀“ 使用Apache Ignite進(jìn)行高性能內(nèi)存計(jì)算 ”一書中的示例章節(jié)。

因此,從版本2.1.0開始 ,Apache Ignite提供了與ACID和SQL兼容的磁盤存儲(chǔ),該磁盤存儲(chǔ)與Ignite的持久性內(nèi)存透明集成,作為可選的磁盤層,用于存儲(chǔ)SSD,Flash,3D XPoint和其他類型的非易失性數(shù)據(jù)和索引倉(cāng)庫(kù)。

Apache Ignite本機(jī)持久性使用新的持久性內(nèi)存架構(gòu) ,該架構(gòu)允許存儲(chǔ)和處理數(shù)據(jù)以及在內(nèi)存中和磁盤上建立索引。 只要啟用該功能,Apache Ignite就會(huì)根據(jù)其容量將超數(shù)據(jù)集存儲(chǔ)在磁盤上,并將一部分?jǐn)?shù)據(jù)存儲(chǔ)在RAM中。 如果RAM中缺少數(shù)據(jù)子集或索引,則耐用內(nèi)存將從磁盤中取出數(shù)據(jù),如下圖所示。

數(shù)據(jù)也可以存儲(chǔ)在中央磁盤存儲(chǔ)中,所有Ignite節(jié)點(diǎn)都連接在中央磁盤存儲(chǔ)中,如下所示。

在開始之前,讓我們?cè)谏澈兄薪榻B項(xiàng)目的先決條件:

  • Apache Ignite版本2.1.0
  • JVM 1.8
  • Apache Maven版本> 3.0.3
  • *基于nix的操作系統(tǒng)
  • 安裝。

    基本上有兩種使用Apache Ignite的方法:

    • 下載二進(jìn)制發(fā)行版,然后將歸檔文件解壓縮到操作系統(tǒng)中的某個(gè)位置,然后使用spring config文件運(yùn)行./ignite.sh bash腳本。
    • 使用所需的Apache Ignite依賴關(guān)系創(chuàng)建一個(gè)maven項(xiàng)目,通過Java代碼配置節(jié)點(diǎn)并運(yùn)行它。

    在這里,我將使用第一個(gè)選項(xiàng)。

    步驟1。

    • 下載 Apache Ignite二進(jìn)制發(fā)行版,并將發(fā)行版解壓縮到沙箱中的某個(gè)位置。
    • 修改IGNITE_HOME / examples / config / persistentstore / example-persistent-store.xml文件,并注釋高速緩存配置的以下部分。
    <property name="cacheConfiguration"> <list><bean class="org.apache.ignite.configuration.CacheConfiguration"><property name="name" value="testCache"/><property name="backups" value="1"/><property name="atomicityMode" value="TRANSACTIONAL"/><property name="writeSynchronizationMode" value="FULL_SYNC"/><property name="indexedTypes"><list><value>java.lang.Long</value><value>org.apache.ignite.examples.model.Organization</value></list></property></bean></list> </property>

    請(qǐng)注意,要啟用Ignite本機(jī)持久性,只需傳遞以下配置(PersistentStoreConfiguration的實(shí)例),該配置已在example-persistent-store.XML文件中進(jìn)行了預(yù)配置。

    <property name="persistentStoreConfiguration"> <bean class="org.apache.ignite.configuration.PersistentStoreConfiguration"/> </property>
    • 從IGNITE_HOME目錄運(yùn)行以下命令。
    ./ignite.sh $IGNITE_HOME/examples/config/persistentstore/example-persistent-store.xmlStep 2. create a Maven project with the following command.mvn archetype:create -DgroupId=com.blu.imdg -DartifactId=ignite-persistence
    • 在pom.xml中添加以下依賴項(xiàng)
    <dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>2.1.0</version></dependency><dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>2.1.0</version></dependency>
    • 創(chuàng)建具有以下內(nèi)容的Java類。
    public class HelloWorld {public static void main(String[] args) {System.out.println("Hello Ignite");// create a new instance of TCP Discovery SPITcpDiscoverySpi spi = new TcpDiscoverySpi();// create a new instance of tcp discovery multicast ip finderTcpDiscoveryMulticastIpFinder tcMp = new TcpDiscoveryMulticastIpFinder();tcMp.setAddresses(Arrays.asList("localhost")); // change your IP address here// set the multi cast ip finder for spispi.setIpFinder(tcMp);// create new ignite configurationIgniteConfiguration cfg = new IgniteConfiguration();cfg.setClientMode(true);// set the discovery§ spi to ignite configurationcfg.setDiscoverySpi(spi);// Start igniteIgnite ignite = Ignition.start(cfg);ignite.active(true);// get or create cacheIgniteCache cache = ignite.getOrCreateCache("testCache");// put some cache elementsfor (int i = 1; i <= 100; i++) {cache.put(i, Integer.toString(i));}// get them from the cache and write to the consolefor (int i = 1; i <= 100; i++) {System.out.println("Cache get:" + cache.get(i));}ignite.close();} }

    請(qǐng)注意,我們使用Ignite客戶端模式來處理數(shù)據(jù)。 運(yùn)行HelloWorld應(yīng)用程序后,應(yīng)在緩存中插入100個(gè)元素(緩存名稱
    testCache )。

    第三步

    • 讓我們使用ignitevisor命令工具檢查數(shù)據(jù)。 在ignitevisor命令工具中使用cache -scan命令。 您應(yīng)該在控制臺(tái)中得到類似的插圖。 緩存中的所有100個(gè)元素。
      • 現(xiàn)在,讓我們看看引擎蓋下發(fā)生了什么。
    du -h .

    您應(yīng)該在控制臺(tái)中得到如下所示的內(nèi)容。

    如果啟用Apache Ignite本機(jī)持久性,則Ignite將在所有群集節(jié)點(diǎn)上的內(nèi)存和磁盤上持久存儲(chǔ)所有數(shù)據(jù)和索引。

    如果要瀏覽目錄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(在我的情況下),則將為每個(gè)緩存找到單獨(dú)的文件夾。 名稱為cache-testCache的文件夾將包含我們剛剛插入的所有緩存條目(100個(gè)元素)。

    文件index.bin是緩存條目的索引,每個(gè)緩存元素都獲取其各自的頁面文件。 為什么會(huì)這樣呢? 現(xiàn)在,Ignite體系結(jié)構(gòu)是基于頁面的體系結(jié)構(gòu)。 讓我們仔細(xì)看看,內(nèi)存現(xiàn)在分為區(qū)域->區(qū)域分為段->段分為頁。 頁面可以交換到磁盤中。 頁面可以存儲(chǔ):

    • 數(shù)據(jù)
    • 元數(shù)據(jù)
    • 指數(shù)

    頁面是固定長(zhǎng)度的塊,它還支持自動(dòng)碎片整理。 如果仔細(xì)看一下頁面大小,它們?nèi)际?4 KB。 每當(dāng)Ignite需要從磁盤加載數(shù)據(jù)時(shí),它只會(huì)加載頁面文件,因此速度非常快。

    同樣,在預(yù)寫日志(WAL)上還有另一個(gè)概念。 如果進(jìn)行更新,則首先將更新內(nèi)存中的數(shù)據(jù)并將頁面標(biāo)記為臟,然后將數(shù)據(jù)持久保存到預(yù)寫日志中。 點(diǎn)燃只是將更新附加到WAL文件中。 WAL文件與Cassandra commitlog文件非常相似,但有一個(gè)區(qū)別。 Cassandra將并行寫入內(nèi)存和磁盤上的commitlog文件,另一方面,Ignite首先將數(shù)據(jù)更新到內(nèi)存中,然后將數(shù)據(jù)附加到WAL中。 有關(guān)更多信息,我建議您看看
    文檔 ,這是非常詳盡的。

    第四步。

    • 重新啟動(dòng)Ignite節(jié)點(diǎn),并檢查緩存
      testCache與
      點(diǎn)火器 。 您最終會(huì)感到驚訝,因?yàn)闆]有數(shù)據(jù)進(jìn)入緩存。
    • 讓我們稍微修改一下helloworld類,然后再次運(yùn)行該應(yīng)用程序,注釋或刪除以下代碼片段,如下所示。
    // put some cache elements for (int i = 1; i <= 100; i++) {cache.put(i, Integer.toString(i)); }Run the application and check the cache?testCache?through?ignitevisor?and you application console.

    每當(dāng)發(fā)生任何讀取請(qǐng)求時(shí),Ignite首先都會(huì)將數(shù)據(jù)檢入內(nèi)存。 如果內(nèi)存中不存在該數(shù)據(jù)集,則Ignite立即從磁盤加載緩存條目并加載到內(nèi)存中。 還要注意的是,所有條目都以堆的形式進(jìn)入內(nèi)存。

    好處

    使用Ignite本機(jī)持久性,現(xiàn)在您可以輕松地進(jìn)行數(shù)據(jù)恢復(fù)備份,Denis Magda通過使用Ignite本機(jī)持久性撰寫了一篇有關(guān)數(shù)據(jù)恢復(fù)的綜合文章 。 我在這里必須提到的一件事是集群之間的數(shù)據(jù)復(fù)制。 通過使用Ignite本機(jī)持久性,現(xiàn)在您可以在線將數(shù)據(jù)從一個(gè)群集復(fù)制到另一個(gè)群集。 您可以使用任何基于磁盤的標(biāo)準(zhǔn)數(shù)據(jù)復(fù)制工具將已更改的數(shù)據(jù)集從主數(shù)據(jù)中心復(fù)制到備用數(shù)據(jù)中心或Ignite群集。

    翻譯自: https://www.javacodegeeks.com/2017/09/apache-ignite-native-persistence-brief-overview.html

    創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

    總結(jié)

    以上是生活随笔為你收集整理的Apache Ignite本机持久性,简要概述的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。