У меня есть страница, которая касается большого количества данных в базе данных.Он отображает большое количество данных, а также выполняет на нем достаточное количество вычислений, что было бы очень большой проблемой в группе по запросу или в хранимой процедуре.Намного проще, когда у вас есть модель вашего домена.
В любом случае, в результате Hibernate завершает выполнение TONS запросов по мере извлечения всех данных.На самом деле не имеет значения, получаю я данные с нетерпением или лениво ... все запросы достигают примерно 600-700 мс.
Отдельные запросы выполняются очень быстро.Они даже не 1 мс.Но, как вы видите, эта страница выполняет множество запросов для таблицы, в которой перечислены результаты учебного курса для 58 студентов:
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 студентовпройти курс, чтобы 600-700 мс убили сервер.
Чтобы дать представление о сложности, вот отношения 1-M:
Module (1) -> Task-> Вопрос-> Ключевое слово
ActiveModule (1) -> ActiveTask-> ActiveQuestion-> QuestionResult-> Keyword, LanguageKeyword
Также есть и другие ссылки 1-M:
Module-> ActiveModule
Task-> ActiveTask
Question-> ActiveQuestion
По сути, это действительно сложный граф данных.
Какие у меня варианты?Сервер, на котором работает это приложение, имеет только 1 ГБ ОЗУ, поэтому о кэшировании отдельных объектов практически не может быть и речи.Я не знаю, принесет ли Hibernate меньше запросов.Их так много.
Схема для этого приложения очень древовидная, глубокая и сложная.К сожалению, все эти данные необходимы.Деревья в основном все или ничего.