从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作为持久性解决方案相关推荐

  1. 使用Infinispan创建自己的Drools和jBPM持久性

    我 在这里发表的原始文章: 您好,欢迎来到我打算向您展示如何创建自己的Drools和jBPM持久性实现的帖子. 我已经为流口水对象开发了基于infinispan的持久性方案,并且在此过程中学到了很多东 ...

  2. 10个比较艰难的Java面试题与答案!

    作者:Yujiaao https://segmentfault.com/a/1190000019962661 这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不 ...

  3. 这10道Java面试题!95%的人回答不出来!

    作者:Yujiaao https://segmentfault.com/a/1190000019962661 1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Ja ...

  4. LiveData + ViewModel + Room (Google 官文)+Demo

    原文地址:lovestack.github.io/2017/11/13/- demo:github.com/lovestack/V- 本指南适用于那些过去构建应用程序有基础知识,现在想知道构建强大的生 ...

  5. 关于序列化的 10 几个问题,你顶得住不?

    任何序列化该类的尝试都会因NotSerializableException而失败,但这可以通过在 Java中 为 static 设置瞬态(transient)变量来轻松解决. Java 序列化相关的常 ...

  6. 挑战 10 个最难回答的 Java 问题(附答案)

    这是我收集的10个最棘手的Java面试问题列表.这些问题主要来自 Java 核心部分 ,不涉及 Java EE 相关问题.你可能知道这些棘手的 Java 问题的答案,或者觉得这些不足以挑战你的 Jav ...

  7. 挑战10个最难回答的Java面试题,我第2题就跪了...

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前往,查看更多 这是 ...

  8. 这10道Java面试题!大部分的人回答不出来

    1.为什么等待和通知是在 Object 类而不是 Thread 中声明的? 2.为什么Java中不支持多重继承? 3.为什么Java不支持运算符重载? 4.为什么 String 在 Java 中是不可 ...

  9. 史上最难10道Java面试题!

    点击上方"朱小厮的博客",选择"设为星标" 回复"1024"获取独家整理的学习资料 这是我收集的10个最棘手的Java面试问题列表.这些问题 ...

最新文章

  1. 告别硬编码,SpringBoot实现动态增删启停定时任务
  2. mSystems:南京土壤所禇海燕组受邀发表微生物生物地理学综述(官方配视频简介)
  3. html 重置画布坐标系,html5清空画布方法(三种)
  4. 麻省理工学院揭秘男女配对的真相
  5. java编程里的values怎么使用,详解Java编程中super关键字的用法
  6. Android开发之星期天数的实现与日期转星期几
  7. sudo vi ~/etc/profile 报错E212:Can't open file for writing
  8. Tomcat+Spring+Quartz Restart or shutdown error
  9. Saiku2.6 配置数据源
  10. python思维方法_小白3个月学会Python的路径和思维方式“大揭秘”!
  11. 三大组件之Spring 第四章Spring与DAO
  12. 云计算存在哪些安全问题
  13. 第四章第六题(圆上的随机点)(Random points on a circle)
  14. 激活时显示图片上传资源服务器失败,720全景图上传时提示“切图失败”的处理办法...
  15. 推荐系统工程系列(1):浅谈推荐系统架构
  16. Xilinx ZynqMP Mali-400 MP2
  17. php逐个汉字遍历字符串
  18. 【Altium designer】新手入门(PCB layout设计)
  19. 系列超声发现脊柱关节炎附着点处新骨形成
  20. Ubuntu 20.04设置开机自启动

热门文章

  1. react-redux模型图
  2. 解决: -bash: docker-compose: command not found、linux 安装 docker-compose
  3. 框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...
  4. ping 命令使用代理_网络检测知识篇:ping命令使用知识,你知道几点?
  5. Object.hashCode()与Object.equals()
  6. 本地java判断zk节点是否存在
  7. leetcode初级算法4.只出现一次的数字
  8. HttpClient 4 API –获取状态代码-getStatusLine()。getStatusCode()示例
  9. selenium自动化测试_Selenium测试可实现有效的测试自动化
  10. starter_您是否尝试过MicroProfile Starter?