1

我正在使用 oracle 11g 存储大量数据(大约 1kk 条记录)。我的架构看起来像(简化):

客户表:

   ---------------------------------------
  |id | firstName | lastName | middleName |
   ---------------------------------------

操作表:

   ---------------------------------------
  |id | client_id | date | balance | type |
   ---------------------------------------

我需要为客户生成过滤和聚合的报告,包括不同的聚合行。例如,我需要一份报告,其中包含执行某种类型操作的客户。报告应包含以下列:所有操作的余额总和,过滤类型的操作余额总和,当年的操作余额总和。

我正在使用 java 和 hibernate 标准生成一个请求,但是代码会增长,现在维护起来太困难了。

使用 sql 生成复杂报告的最佳决策是什么:

  1. 将所有数据加载到我的应用程序中并将其聚合到我的代码中?
  2. 将过滤和聚合逻辑拆分为存储函数?
  3. 使用临时表分步拆分过滤和聚合?
  4. 使用 3rd 方软件或其他 nosql 存储来生成报告?(如 bi 工具或 map-reduce)
  5. 写一个java存储过程?

什么是“标准企业”解决方案,能够以正常的性能和资源利用率生成海量数据的复杂报告?

4

1 回答 1

1

在这种情况下,Hibernate 不是您的朋友。作为第一步,如果您的应用程序的其余部分已经在使用 Hibernate,请尝试编写 Oracle 存储过程并通过 JDBC 或 Hibernate 从 Java 调用它们。

如果您的计算有共同的部分,请考虑将它们分解为单独的存储过程。

如果有共同的数据变化相对较慢(与其余数据相比),您可以使用物化视图。

另一个考虑。如果您按日期进行大量报告,但操作表记录带有日期/时间字段的时间戳,请考虑为日历日期添加一个数字字段,格式为 20130315,并在其上编制索引。这将对性能改进大有帮助,但仍可能会给您留下大量的 Oracle 查询。

你的数据有多大?什么是“1kk”?

于 2013-03-15T14:39:18.937 回答