oracle中大量数据的复杂报告

时间:2013-03-15 13:43:31

标签: java oracle hibernate reporting

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

客户表:

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

手术台:

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

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

我正在使用java和hibernate标准生成请求,但代码增长了,现在它太难以维护了。

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

  1. 将所有数据加载到我的应用程序并在我的代码中对其进行重新聚合?
  2. 将过滤和聚合逻辑拆分为存储函数?
  3. 使用临时表分步过滤和聚合?
  4. 使用第三方软件或其他nosql存储生成报告? (比如bi工具或map-reduce)
  5. 编写一个java存储过程?
  6. 什么是“标准企业”解决方案,能够生成具有正常性能和资源利用率的大量数据的复杂报告?

1 个答案:

答案 0 :(得分:1)

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

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

如果存在相对较慢的常见数据(与其他数据相比),则可以使用实体化视图。

另一个考虑因素。如果按日期进行大量报告,但操作表记录的时间戳记带有日期/时间字段,请考虑以格式(例如20130315)添加日历日期的数字字段,并在其上添加索引。这对性能改进有很大帮助,但可能仍然会给您带来巨大的Oracle查询。

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