pas*_*ian 3 postgresql partitioning spring-data spring-data-jpa spring-boot
我们有一个Spring Boot项目,该项目使用Spring-JPA进行数据访问。我们有几个表,它们在其中一次(或几次,都在几分钟之内)创建/更新行。我们不会更新超过一天的行。这些表(例如审核表)可能会变得非常大,我们希望使用Postgres的表分区功能来按月分解数据。因此,主表始终具有该日历月的数据,但是如果查询需要从前几个月进行检索,它将以某种方式从其他分区读取。
两个问题:
1)这是归档较旧数据的好主意,但仍使其可查询吗?2)Spring-JPA是否可以用于分区表?还是我们必须弄清楚如何分解查询,进行本机查询并连接restult集?
谢谢。
我在一段时间内使用Hibernate和Spring JPA进行postgres分区。因此,我认为,我可以尝试回答您的问题。
1)这是归档较旧数据的好主意,但仍使其可查询吗?
如果您正在应用索引而不是频繁地重新索引表,则数据分区可能会导致更快的查询结果。
您也可以在postgres中使用聚簇索引功能,以更快地获取数据。
因为具有较旧数据的表将不会被更新,所以聚簇索引将有效地提高性能。
2)Spring-JPA是否可以用于分区表?还是我们必须弄清楚如何分解查询,进行本机查询并连接restult集?
Spring JPA将使用分区表开箱即用。它将从主表和子表中检索数据,并返回连接的结果集。
注意:分区表问题
您将面对分区表的唯一问题是在分区表中插入。
让我解释一下,在对表进行分区时,将在主表上创建一个触发器,并且该触发器将返回null。这是使用Spring JPA / Hibernate在分区表中插入问题背后的关键。
当您尝试使用Spring JPA或Hibernate插入一行时,您将面临以下问题
批量更新从更新[0]返回意外行数;实际行数:0;预期:1
要解决此问题,您需要重写Batching batcher的实现。
在休眠状态下,您可以使用以下配置提供批处理工厂的自定义实现
hibernate.jdbc.factory_class = path.to.my.batcher.factory.implementation
在Spring JPA中,您可以使用以下配置通过自定义实现批处理构建器来实现相同目的
hibernate.jdbc.batch.builder = path.to.my.batch.builder.implementation
参考文献:
| 归档时间: |
|
| 查看次数: |
2135 次 |
| 最近记录: |