gpt4 book ai didi

java - 我有哪些优化这个 Spring/Hibernate 页面的选项?

转载 作者:搜寻专家 更新时间:2023-10-30 20:45:16 25 4
gpt4 key购买 nike

我有一个页面涉及数据库中的大量数据。它显示大量数据,并对其进行大量计算,这对于在 group by query 内部或存储过程中进行计算非常麻烦。当您拥有自己的领域模型时,一切都会变得简单得多。

无论如何,Hibernate 最终会在提取所有数据时进行大量查询。我是急切地还是懒惰地获取数据并不重要……所有查询总计大约 600-700 毫秒。

个别查询非常快。它们甚至不到 1 毫秒。但如您所见,此页面对列出 58 名学生的培训类(class)结果的表格进行了大量查询:

0 ms  JDBC SELECT (MODULE)
0 ms JDBC SELECT (TASK)
0 ms JDBC SELECT (USER_ACCOUNT) // student #1
0 ms JDBC SELECT (ACTIVE_TASK)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (USER_ACCOUNT)
0 ms JDBC SELECT (ACTIVE_TASK)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (USER_ACCOUNT)
0 ms JDBC SELECT (ACTIVE_TASK)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)

0 ms JDBC SELECT (USER_ACCOUNT) // student #2
0 ms JDBC SELECT (ACTIVE_TASK)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (QUESTION)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (KEYWORD)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_FILL_IN_THE_BLANK_ANSWER)
0 ms JDBC SELECT (QUESTION_RESULT_TO_FILL_IN_THE_BLANK_ANSWER)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)

0 ms JDBC SELECT (USER_ACCOUNT) // student #3
....
0 ms JDBC SELECT (USER_ACCOUNT) // student #58
0 ms JDBC SELECT (ACTIVE_TASK)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (ACTIVE_QUESTION)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_LANGUAGE_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)
0 ms JDBC SELECT (QUESTION_RESULT_TO_KEYWORD)

30-60 名学生参加一门类(class)是很常见的,因此 600-700 毫秒将杀死服务器。

为了说明复杂性,这里是 1-M 关系:

模块(1)->任务->问题->关键词

ActiveModule(1)->ActiveTask->ActiveQuestion->QuestionResult->Keyword, LanguageKeyword

此外,还有其他 1-M 链接:

模块->ActiveModule

任务->ActiveTask

问题->ActiveQuestion

基本上,这是一个非常复杂的数据图。

我有哪些选择?这个应用程序运行的服务器只有 1 GB 的 RAM,所以缓存单个对象几乎是不可能的。我不知道让 Hibernate 发出更少的查询是否会产生很大的不同。有这么多。

此应用的架构非常像树,而且很深很复杂。不幸的是,所有这些数据都是必需的。树木基本上是全有或全无。

最佳答案

使用 View 。这应该会优化您的联接并减少您必须执行的单个查询的数量。

关于java - 我有哪些优化这个 Spring/Hibernate 页面的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4308773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com