Caching 扩展和聚类JPA

Caching 扩展和聚类JPA,caching,jakarta-ee,jpa,memcached,ehcache,Caching,Jakarta Ee,Jpa,Memcached,Ehcache,我正在jboss7上构建一个常规的JavaEE应用程序,它将在数据层中使用JPA。我想使这个应用程序,使其规模与负载。虽然很清楚如何扩展web层:创建更多的机器并将它们扔到负载平衡器后面,但扩展数据层却不是这样 我可能可以对我的数据库(MySQL)进行集群。仍然,这使得JPA层未聚集。理想情况下,JPA将通过使用MySQL支持的(集群)内存缓存进行扩展 当我环顾四周时,关于JPA缩放的所有信息似乎都有3-4年的历史了。人们谈论ehcache、memcached和infinispan。我不确定这是

我正在jboss7上构建一个常规的JavaEE应用程序,它将在数据层中使用JPA。我想使这个应用程序,使其规模与负载。虽然很清楚如何扩展web层:创建更多的机器并将它们扔到负载平衡器后面,但扩展数据层却不是这样

我可能可以对我的数据库(MySQL)进行集群。仍然,这使得JPA层未聚集。理想情况下,JPA将通过使用MySQL支持的(集群)内存缓存进行扩展

当我环顾四周时,关于JPA缩放的所有信息似乎都有3-4年的历史了。人们谈论ehcache、memcached和infinispan。我不确定这是否仍然是最新的


有人能告诉我Java EE集群和扩展的最新技术,特别是在数据层。

各种缓存策略仍然是扩展JPA/Hibernate的方法(您在问题中基本上列出了最流行的选项)。据我所知,在这个领域4-5年来没有什么特别的事情发生。您还没有提到的另一个选项是JBoss缓存。因此,JPA/Hibernate的二级缓存仍在这一领域发挥作用

为什么这里没有进展?我的猜测是,首先,在需要高性能的领域,需要可伸缩应用程序的人往往会忽略JPA和Hibernate。通常人们使用Spring框架JDBCTemplate助手和事务管理中的SQL。那么,可伸缩性就是这个领域中数据库功能的问题


另一个趋势是不使用SQL数据库。有很多解决方案:MongoDB、CouchoDB、Cassandra、Redis等等。这些通常是类似Google BigTable的键值存储(这过于简单化,但这或多或少是该方法背后的想法),如果您接受它们的局限性(关系不再容易管理等),它们会像地狱一样扩展。

有许多解决方案,主要有两类解决方案:

  • 扩展数据库
  • 使用群集缓存减少数据库负载
EclipseLink支持数据分区,以便跨一组数据库实例对数据进行分片

见:

您也可以使用MySQL集群

见:

Oracle TopLink Grid提供EclipseLink JPA支持,以作为分布式缓存与Oracle Coherence集成

见:

EclipseLink的缓存通过缓存协调支持集群

见:

嗨,Piotr,感谢您的回复。我有兴趣了解更多关于JDBC模板助手的信息。有什么好的指点吗?这是一本好书。还有一些书,《行动中的春天》是好的,那些被指派处理绩效问题的人不太可能完全忽视或回避JPA——这没有多大意义,因为JPA本身对绩效几乎没有影响。。。它可以很容易地与任何优化良好的SQL语句进行比较。。。神奇之处在于JPA的criteria/criteria API,一个错误的标准会很慢,但也会是一个错误的SQL语句,事实上,使用JPQL可以将JPA开销降低到“几乎不存在”。。。但这是另一个故事。每个忽视/回避JPA的人都会自动地做错事。对不起,嗨,詹姆斯,谢谢你的回复。我们既要扩大规模,又要避免任何单点故障。在我所有的调查中,memcached似乎是“同类中最好的”:它拥有广泛的支持,并且似乎能够做任何其他缓存都能做的事情。你觉得呢?我从皮奥特和詹姆斯那里得到了惊人的答案。不幸的是,SOF只让我将一个标记为正确答案。多亏了这两个。接下来,我需要找出什么是最好的缓存:为什么我会使用memcached以外的任何东西。