#jqgrid
#jqgrid
Вопрос:
У меня есть сайт, где я должен извлечь миллион записей из базы данных и отобразить их в jqGrid. Но когда я это делаю, для извлечения и отображения записей требуется от 45 до 60 минут.
Я использую jqGrid с JSP, Hibernate, JPA и базой данных MySQL.
Кто-нибудь может сказать мне, как это сделать? Так что время задержки уменьшается, а записи загружаются быстрее.
Заранее спасибо
@ОБНОВИТЬ
Я попытался использовать JSON вместо XML, и время сократилось до 30 минут. В течение этих 30 минут требуется 16 минут для извлечения данных из базы данных и оставшиеся 14 минут для передачи данных интерфейсу
@ОБНОВЛЕНИЕ 2
Есть несколько способов, с помощью которых я смог сократить время, затрачиваемое на загрузку данных в jqgrid.
Способ 1: у меня было предложение ORDER BY в моем запросе, я удалил его, и время сократилось с 45-60 минут до 5 минут
Способ 2. Удалите / уменьшите количество соединений в запросе.
Способ 3. вместо использования объекта Hibernate или JPA напрямую получить результат запроса в результирующем наборе и использовать этот результирующий набор для создания объекта json.
Используя способы 1 и 3, я сократил время загрузки 200000 записей до 1 минуты 32 секунды.
Ответ №1:
Обычно вам не нужно показывать миллионы записей одновременно. Это было бы безумно и совершенно непрактично. Что вам нужно, так это реализовать разбивку на страницы. Разбивка на страницы на стороне сервера. Таким образом, вы получаете только те записи, которые вы можете в данный момент отображать на экране. 10-30 записей за раз кажутся разумным количеством для отображения. Важно, чтобы разбивка на страницы выполнялась на уровне базы данных, чтобы избежать выборки миллионов записей и отображать только очень немногие из них.
Комментарии:
1. Я согласен с этим. Но я хотел добавить … от 45 до 60 минут ?!? Это звучит безумно. Я бы попытался определить, сколько из этого времени находится в базе данных, сколько времени ожидания загрузки, сколько синтаксического анализа. Если ваша база данных занимает значительную часть этого времени, вам может потребоваться ее оптимизация.
2. @dnuttle, имхо, больше всего времени займет передача клиенту такого огромного объема данных по протоколу HTTP и, что наиболее важно, построение дерева DOM с таким количеством элементов внутри браузера.
3. Возможно. Определенно нецелесообразно представлять миллион строк любому пользователю, который не является роботом.
4. И если вы хотите отобразить «все» строки, вы можете подделать пользователя, установив rownum равным 100 и атрибут прокрутки равным 1 в настройках jqGrid. Это будет выглядеть так, как будто загружены все строки, но когда пользователь прокручивает вниз, 100 строк автоматически загружаются каждый раз.