Hibernate:每个月自动拆分表

时间:2016-08-26 10:33:34

标签: java database spring postgresql hibernate

我正在研究一个带有PostgreSQL和Hibernate的Spring-MVC应用程序,其中我有几个表,行数超过10万(10万)。这些表,我95%的时间只访问最新的数据,并筛选所有这些行是耗时的。很多时候查询规划器甚至没有使用索引(原因我不知道)。

然后我想到每周拆分数据库表,所以我们可以先访问最新的月份数据库,然后如果用户请求,那么前一个表中的更多结果将直接添加到请求中。

执行的大多数查询都要求我们使用JOIN,因为表格映射为一对多。

行数为>的模型文件之一超过10万。

型号:

Cache::rememberForever('someVar', 'value');

Hibernate是否提供了解决此问题的策略或方法?谢谢。

2 个答案:

答案 0 :(得分:0)

如何将数据分成几个表,如:

  • 当前值(最多一周) - 表latest_values
  • 也是较旧的值(最多一年) - table year_values
  • 所有值(完整历史记录) - 表all_values

始终插入latest_values并将规则推送到其他值。

每天或每周运行一次" DELETE FROM latest_values WHERE insert_date< CURRENT_DATE - 7"。每月运行" DELETE FROM year_values WHERE insert_date< CURRENT_DATE - 365" (闰年不重要)。

通过这种方式,您可以保持较小的表格,并且可以轻松地检索更多当前值,并且如果查询需要它们,仍然可以获得所有值。

每周拆分成一个单独的表格(这就是我理解你的想法)会给你留下太多的表格而且复杂 - 因此很慢 - 如果你需要数周的数据,那么UNION的操作会很快。

答案 1 :(得分:0)

您可以添加一个新的列,例如句号。这将存储添加的年 - 月行。 这将作为分区。 当您对最近数据运行查询时,您可以指定要查找的句点(YYYYMM)。这将减少您现在面临的开销。

如果你真的想拥有分区数据库,这是解决这个问题的最佳方法,请查看此内容 PostgresSQL DOC

相关问题