7

我的部门已决定对我们的一些大型 Oracle 数据库进行散列分区/分片。我们将在不同的模式中拆分我们的实体。我的任务是评估不同 JPA 实现对此的适用性。

我告诉过要关注的两个是EclipseLink和 Apache OpenJPA/Slice。我们过去只使用过 Hibernate,但Hibernate Shards处于测试阶段,似乎不再积极开发(最后一个版本是 2007 年),所以我们不考虑它。

我将进行自己的评估和试验实施,但我不相信我会在给定的时间内对这些实施的整体质量有很好的感觉。如果您在生产环境中使用 OpenJPA 和/或 EclipseLink,特别是如果您的数据库是共享的,我想听听您的经验(正面和负面),您对它们的整体质量的看法,以及您是否愿意这样做有机会再选择。

4

3 回答 3

4

EclipseLink 的数据分区支持在 2.2 版本中作为基础产品的一部分发布。

它支持哈希分区,以及其他几种类型的分区(值、范围)以及用户定义的策略。2.3 版本还包括对 Oracle RAC、UCP 和 WebLogic GridLink 的集成支持。

见, http://java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html

于 2011-06-09T13:19:46.680 回答
4

OpenJPA Slice 可能是分片数据库环境中 JPA 应用程序的一种选择。

OpenJPA Slice 从 1.2 版开始可用,并且随 Websphere 7.0 及更高版本一起提供。Slice 的基本使用约定是保留完全相同的基于 JPA 的应用程序代码,以处理水平分区的数据库分片,而不会以任何方式影响数据库模式。数据库分片可能来自不同的供应商。

Slice 遵循基于策略的设计,允许用户应用程序控制哪些分片/分片将保留新实例,查询将如何针对分片子集等。

基本限制(在任何分片环境中都很典型)是持久域模型应该遵循树约束模式。本质上,给定一个实例 x 存储在分片 A 中,x 的持久闭包,即从 x 直接或间接可达的实例集,也必须存储在同一个分片 A 中。当您持久化 x 时,Slice 会自动计算闭包。

如果应用程序可以承受这样的限制,那么 Slice 可能是一个很好的选择。

有时,某些实例可能会在关闭之间共享,例如国家代码或货币代码。Slice 确实提供了跨多个分片复制此类“主数据”类实例的规定。

支持与分片阿贝尔/可交换的聚合操作(MAX、MIN、SUM)。不支持 AVG 等非阿贝尔聚合。也支持排序或 Top-N 查询。

有关 Slice 的更多信息,请参阅以下参考资料

[1] OpenJPA 用户手册: http: //openjpa.apache.org/builds/latest/docs/manual/manual.html#ref_guide_slice

[2] IBM Developerworks 文章:http ://www.ibm.com/developerworks/java/library/os-openjpa/?ca=drs-

于 2011-06-09T17:18:04.567 回答
0

如果您希望可以使用外部工具,它不仅可以对应用程序开发人员隐藏分片逻辑,还可以对 BI 用户、DBA 等隐藏分片逻辑。查看ScaleBase

于 2011-06-15T13:45:42.587 回答