我正在将jboss7上的常规Java EE应用程序放在一起,它将在数据层中使用JPA。我想使这个应用程序,以便它与负载扩展。虽然很明显如何扩展Web层:创建更多的机器并将它们抛在负载均衡器之后,扩展数据层的程度却不那么高。
我可能会聚集我的数据库(MySQL)。 Stil,使JPA层保持不变。理想情况下,JPA将通过使用由MySQL支持的(集群)内存缓存来扩展。
当我环顾四周时,有关JPA缩放的所有信息似乎都是3-4岁。人们谈论ehcache,memcached和infinispan。我不确定这是否仍然是最新的。
有人能告诉我Java EE集群和扩展的最新技术,特别是在数据层中。
答案 0 :(得分:7)
各种缓存策略仍然是扩展JPA / Hibernate的方法(您基本上将问题命名为最受欢迎的选项)。据我所知,自从这个领域4到5年以来,没有什么特别的事情发生。你还没有提到的另一个选择是JBoss Cache。因此,JPA / Hibernate的二级缓存仍然是这一领域的规则。
为什么这里没有进展?我的猜测是,首先需要可扩展应用程序的人往往会在需要高性能的领域忽略JPA和Hibernate。通常人们会穿着Spring Framework JDBCTemplate帮助程序和事务管理。然后,可伸缩性就是这个领域数据库功能的问题。
另一个趋势是使用No-SQL数据库。有一些解决方案:MongoDB,CouchoDB,Cassandra,Redis,仅举几例。这些通常是谷歌BigTable像键值存储(这是过于简单化,但它或多或少是这种方法背后的想法),如果你接受他们的限制(关系不再容易管理,等等),他们可以扩展到地狱。
答案 1 :(得分: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