缩放和聚类JPA

Raj*_*Raj 9 memcached caching jpa ehcache java-ee

我正在将jboss7上的常规Java EE应用程序放在一起,它将在数据层中使用JPA.我想使这个应用程序,以便它与负载扩展.虽然很明显如何扩展Web层:创建更多的机器并将它们抛在负载均衡器之后,但扩展数据层的可能性却要小得多.

我可以集群我的数据库(MySQL).Stil,使JPA层保持不变.理想情况下,JPA将通过使用由MySQL支持的(集群)内存缓存来扩展.

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

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

Pio*_*ski 7

各种缓存策略仍然是扩展JPA/Hibernate的方法(您基本上将问题命名为最受欢迎的选项).据我所知,自从这个领域4到5年以来,没有什么特别的事情发生.你还没有提到的另一个选择是JBoss Cache.因此,JPA/Hibernate的二级缓存仍然是这一领域的规则.

为什么没有进展呢?我的猜测是,首先需要可扩展应用程序的人往往会在需要高性能的领域忽略JPA和Hibernate.通常人们会穿着Spring Framework JDBCTemplate帮助程序和事务管理.然后,可伸缩性是该领域数据库功能的问题.

另一个趋势是使用No-SQL数据库.有一些解决方案:MongoDB,CouchoDB,Cassandra,Redis,仅举几例.这些通常是谷歌BigTable像键值存储(这是过于简单化,但它或多或少是这种方法背后的想法),如果你接受他们的限制(关系不再容易管理,等等),他们可以扩展到地狱.


Jam*_*mes 6

有许多解决方案,两个主要类别的解决方案是:

  • 缩放数据库
  • 使用群集缓存来减少数据库负载

EclipseLink支持跨一组数据​​库实例分片数据的数据分区,

请参阅:http: //java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html

你也可以使用MySQL Cluster,

请参阅:http: //www.mysql.com/products/cluster/

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

请参阅:http: //www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html

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

请参阅:http: //wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination