我正在使用oracle 11g存储大量数据(大约1kk记录)。我的架构看起来像(简化):
客户表:
---------------------------------------
|id | firstName | lastName | middleName |
---------------------------------------
手术台:
---------------------------------------
|id | client_id | date | balance | type |
---------------------------------------
我需要为客户端生成包含不同聚合行的过滤和格式化报告。例如,我需要一个报告,其中包含操作某些类型操作的客户。报告应包含以下列份:所有操作的余额总和,过滤类型的操作余额总和,当年的操作余额总和。
我正在使用java和hibernate标准生成请求,但代码增长了,现在它太难以维护了。
使用sql生成复杂报告的最佳决策是什么:
什么是“标准企业”解决方案,能够生成具有正常性能和资源利用率的大量数据的复杂报告?
答案 0 :(得分:1)
在这种情况下,Hibernate不是你的朋友。作为第一步,尝试编写Oracle存储过程并通过JDBC或Hibernate从Java调用它们,如果应用程序的其余部分已经在使用Hibernate。
如果计算中有共同部分,请考虑将它们分解为单独的存储过程。
如果存在相对较慢的常见数据(与其他数据相比),则可以使用实体化视图。
另一个考虑因素。如果按日期进行大量报告,但操作表记录的时间戳记带有日期/时间字段,请考虑以格式(例如20130315)添加日历日期的数字字段,并在其上添加索引。这对性能改进有很大帮助,但可能仍然会给您带来巨大的Oracle查询。
您的数据又有多大?什么是“1kk”?