我想基于实体和JPA 2.0创建设计。在我们当前的架构中,我们将数据存储在MySQL的2000个分区中。每个分区都是MyIsam表,名称从data_0000到data_1999,这只是软件解决方案。由于性能问题,我们没有使用任何特定于数据库的分区选项。这很好用,但从软件的角度来看,我们没有很好的架构。现在我们正在将所有内容迁移到JPA,我们遇到了这样的问题。
假设当我们想要将数据插入某个分区时,我们必须计算分区号(表名),即data_(entity.object_id mod 2000)。 object_id列不为null。我们如何使用JPA和EclipseLink设计这个,如果我有object_id = 453的实体,所以当我持久化这个对象时,数据将存储在表data_0453中。我在这里看到了许多基于注释的分区示例http://wiki.eclipse.org/EclipseLink/Examples/JPA/Partitioning但是没有一个与基于表名的分区相关。
这种情况的最佳方法是什么?
-
由于
答案 0 :(得分:1)
EclipseLink的分区支持用于数据库分区,而不是表分区。大多数数据库都支持表分区,因此您必须自定义构建解决方案。
您是否可以尝试使用视图或存储过程封装对表的访问? EclipseLink允许您使用存储过程调用覆盖CRUD操作,请参阅http://wiki.eclipse.org/EclipseLink/Examples/JPA/CRUDStoredProcedures
否则你可以将子类映射到每个表分区,但是对于2000,这可能不是一个好的解决方案。您可以使用EclipseLink的动态支持来避免使用create 2000子类。
您还可以查看EclipseLink的多租户支持,它可以根据ID选择一个表。
您也可以不映射表并通过本机SQL查询访问它。
但是,我认为使用存储过程可能是您最好的解决方案。