Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过缓存mysql表更快地生成报告_Java_Mysql_Sql_Database_Report - Fatal编程技术网

Java 通过缓存mysql表更快地生成报告

Java 通过缓存mysql表更快地生成报告,java,mysql,sql,database,report,Java,Mysql,Sql,Database,Report,我有一个mysql数据库,它是3NF(第三范式) web应用程序是用JAVA编写的 主表“Events”大约有120万行 应用程序支持许多基于事件中数据行的报告。 一些复杂的报告加载速度非常慢,即大约需要30秒到90秒。 生成报告所采取的步骤为 检索用户选择的数据范围中的数据行。(查询经过优化以省去不相关的行) 我们必须对用户选择的数据范围内的每一行进行一些复杂的计算,然后 然后决定是否在报告中使用这些行 如果要使用它们,则进行进一步处理,以根据数据生成结果 由于“步骤2”我们必须对用户选择的数

我有一个mysql数据库,它是3NF(第三范式)

web应用程序是用JAVA编写的

主表“Events”大约有120万行

应用程序支持许多基于事件中数据行的报告。 一些复杂的报告加载速度非常慢,即大约需要30秒到90秒。

生成报告所采取的步骤为

  • 检索用户选择的数据范围中的数据行。(查询经过优化以省去不相关的行)

  • 我们必须对用户选择的数据范围内的每一行进行一些复杂的计算,然后 然后决定是否在报告中使用这些行

  • 如果要使用它们,则进行进一步处理,以根据数据生成结果

  • 由于“步骤2”我们必须对用户选择的数据范围内的每个相关行进行一些复杂的计算,因此报告生成速度较慢。例如,如果用户想要生成月度报告,则必须对大约600k行进行处理

    现在,如果我可以将步骤3中要使用的相关行存储在“所选事件”表中,则可以更快地生成此报告。

    用户首次访问报告后,步骤2之后选择的行可以存储在“selected_events”表中。 因此,从第二次开始,该报告将更快地工作

    现在我的问题是

  • 这不会打破3NF吗

  • 在另一个表中存储重复行以更快地生成报告,这是一种可接受的方法吗

  • 还有其他人做过类似的事情吗?有什么陷阱吗

  • 在大型项目中采取了哪些其他步骤来克服这些问题


  • PS事件表中的数据在插入后永远不会更新。因此,不反映在重复表中的更新问题不会出现。

    至少对于报告目的而言,数据聚合(例如存储计算的月度数字)是非常正常的。在以前执行的报告中创建缓存听起来相当复杂。不知道是否会更好。“我认为我们不能接受任何东西,而且大型项目中的陷阱或步骤对于本网站来说太广泛了。@JamesZ I pin指出了问题所在,指明了问题所在的确切步骤,并提出了解决问题的解决方案。我不是在征求任何一般性意见。我在问人们在面对这样的情况时会做什么。是我在其他项目中发现的解决方案。我花了相当多的时间在谷歌上搜索并提出了这个问题,这样那些有更多项目经验的人就可以分享他们的专业知识。