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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用Infinispan作为持久性解决方案

發布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Infinispan作为持久性解决方案 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從https://vaadin.com/blog/-/blogs/using-infinispan-as-a-persistency-solution交叉發布。 感謝Fredrik和Matti的允許!

各種RDBMS是持久性的實際標準。 建筑師認為使用它們是一個安全的選擇,我敢說現在它們在很多地方都使用過。 為了解決這個問題,我最近一直在探索其他持久性選項,例如圖數據庫 。 這次我和Infinispan一起玩。

如果您通常不熟悉Infinispan或分布式鍵/值數據存儲,則可以將其視為類固醇上的HashMap。 最本質上,該映射在所有群集節點之間共享。 借助群集,您可以獲得巨大的規模,實現快速訪問和冗余,這取決于您如何配置它。 有幾種與Infinispan競爭的產品,例如OS world的Ehcache和Hazelcast以及商業方面的Oracle Coherence 。

實際上,Infinispan是一種您可能根本沒有注意到的技術。 例如, Wildfly的高可用性功能在很大程度上依賴Infinispan緩存。 它還經常用作ORM庫的二級緩存。 但是它本身也可以直接用作持久性庫。

為什么將其視為您的持久性解決方案:

  • 這是閃電般的快速內存數據存儲
  • 存儲的值可以是任何可序列化的對象,不需要復雜的映射庫
  • 它是為群集環境從頭開始構建的–您的數據更安全,更快速地訪問。 水平縮放非常容易
  • 它具有多種可選的高速緩存存儲選項,用于將狀態寫入磁盤(例如,集群范圍內的重新引導)
  • 并非所有數據都需要永久存儲,Infinispan具有內置的復雜逐出規則
  • 使用事務訪問進行ACID更改的可能性

聽起來很棒,不是嗎? 它肯定是針對某些用例的,但是所有技術都有其弱點,鍵/值數據存儲也是如此。 與RDBMS相比,最大的缺點是與其他實體的關系。 您將不得不提出一種策略,該策略用于存儲對其他實體的引用,并且還必須解決基于相關特征的搜索。 如果您最終想知道這些問題,請確保檢查Hibernate OGM是否可以為您提供幫助。

同樣,對數據進行一些分析也可以被認為比傳統的SQL查詢更簡單,或者至少更熟悉。 特別是如果最終有大量數據分布在多個節點上,則必須學習MapReduce編程模型的基礎知識才能進行任何非平凡的查詢。

在Web應用程序中使用Infinispan

盡管Infinispan與Wildfly無關,但我還是決定將實驗基于Wildfly。 如果您明確要求,它的內置版本可用于Web應用程序。 最簡單的方法是將以下MANIFEST.MF條目添加到您的war文件中。 如果您不想用過時的文件來破壞項目,只需使用一個小的war插件配置將其添加即可。

Dependencies: org.infinispan export

當然,您仍然需要向應用程序中添加Infinispan依賴項,但是您可以將其保留為提供。 確保使用服務器提供的相同版本,在Wildlfy 8中,Infinispan版本為6.0.2。 在Maven項目中,添加這種依賴項聲明:

<dependency><groupId>org.infinispan</groupId><artifactId>infinispan-core</artifactId><version>6.0.2.Final</version><!-- Provided as we use the Infinispan provided by Wildfly --><scope>provided</scope> </dependency>

在訪問Infinispan“緩存”之前,您需要對其進行配置。 既有編程配置也有xml配置。 使用Wildfly,最自然的是將Infinispan數據存儲直接配置到服務器配置中。 “正確的”配置文件取決于您如何啟動Wildfly服務器。 如果要在本地測試群集,則可能要在<subsystem xmlns="urn:jboss:domain:infinispan:2.0">部分下將類似的內容添加到您的domain.xml中。

<cache-container name="myCache" default-cache="cachedb"><transport lock-timeout="60000"/><replicated-cache name="cachedb" batching="true" mode="SYNC"/> </cache-container>

請注意,使用此配置,數據僅存儲在群集節點的內存中。 要了解如何調整緩存設置或設置磁盤“備份”,請參閱詳盡的Infinispan文檔 。

為了從UI代碼中刪除所有Infinispan引用,我創建了一個執行所有數據訪問的EJB。 在那里,我注入了Wildfly提供的CacheContainer并在init方法中獲取默認緩存。

@Resource(lookup = "java:jboss/infinispan/container/myCache") CacheContainer cc;Map<String, MyEntity> cache;@PostConstruct void init() {this.cache = cc.getCache(); }

我想您已經想知道了:是的,Map是非常熟悉的java.util.Map接口,其余實現對任何Java開發人員都是微不足道的。 Infinispan緩存擴展了基本的Map界面,但是如果您需要一些更高級的功能,則還可以使用Cache或AdvancedCache類型。

上一個代碼片段中的MyEntity只是我為該示例創建的一個非常簡單的POJO。 通過使用Vaadin CDI,我可以將EJB注入到UI類中并對其執行幾乎所有操作。 實際的Vaadin代碼沒有特殊的技巧,只是普通的CDI加香料的Vaadin代碼。

基于此練習,我是否可以直接使用Infinispan來保持下一個項目的持久性? 可能不是,但是對于某些應用程序,毫不猶豫。 我還可以想象某些混合模型,其中某些數據僅在Infinispan緩存中,而某些數據在傳統RDBMS中,自然在ORM之后,同時兼顧了兩者的優點。

我們還將在2014年9月8日與RedHat的Arun Gupta舉行的聯合網絡研討會中使用Infinispan。在這里,我們將向您展示一個簡單的Vaadin應用程序,以及使用Wildfly對其進行集群的便捷程度。

翻譯自: https://www.javacodegeeks.com/2014/09/using-infinispan-as-a-persistency-solution.html

總結

以上是生活随笔為你收集整理的使用Infinispan作为持久性解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。