Как правильно загружать большой объем данных из БД в Django?

Поставил django 1.8 на python'е 3.5. При загрузке больший страниц (html) или большого объема данных из mysql страница пользователю выдается не полная.
К примеру поставил nvd3-django, при постройке небольшого графика все работает, но как только увеличиваю объем, то страница грузится не полностью (не все данные и html теги). Пробовал пагинаторы, но таже проблема. Насколько я понял дело не в самой выборке т.к. при выдаче большого html документа наблюдается тоже самое.
В какую сторону копать?
  • Вопрос задан
  • 949 просмотров
Решения вопроса 2
@newpy
web-dev
Профилируйте запросы к БД. Найдите узкое место. Устраните или копайте дальше.
Запросы к БД "напрямую" (без django) выполняются так же медленно? Если вы строите графики на фронте, и валится "вывод", то скорее всего узкое место в используемой библиотеке. Причем она по сути обертка для JS. Профилируйте работу javascript. Благо Chrome умеет это все в dev панели. Отлично показывает "затыки" в JS. Отделите ужа от ежа и ищите.
Ответ написан
Комментировать
Для начала объявите для всех о каком объеме данных идет речь?

Если это 100 значений для построения графика и страница не догружается, то нужно смотреть что с сервером, может ответ долгий или на сервере к примеру каждое значение чтобы получить проходит миллион переборок в цикле и каждый проход обращается с запросом к БД.

Если это десятки, сотни тысяч значений, то нужно посмотреть через что вы пытаетесь их отобразить, если это JS библиотека малоизвестная, то возможно в ней проблема, может она тупит при построении, если это какой нибудь highcharts, то нужно смотреть опять же на стороне отдачи данных.

Если это более миллиона данных, то тут уже вопрос и к отдаче и к построению графика ибо такими данными уже ворочать не так просто. Если данные на столько большие, то посмотрите в сторону кеширования получаемых данных, или вообще полностью кеширования страницы.

Большой объем можно разбить на более мелкие, ограничив к примеру датами, или усреднение показателей, тогда вам не придется гонять тонны данных от сервера к браузеру. Так же передавайте только необходимые данные, к примеру если для графика вам нужна дата и показатель, то отдавайте на сервере в JSON именно эти данные, не нужно к каждому показателю прилагать другие данные (заголовок, описание, дата создания, дата обновления, дата модерирования, всевозможные данные флагов и т.д.). Так вы можете сэкономить трафик, а это все время.

Как ранее писали, профилируйте. Смотрите кто тратит время, и от этого отталкивайтесь.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
dimonchik2013
@dimonchik2013
non progredi est regredi
странно слышать о PHPшных проблемах в Питоне

1) точно дело не в веб-сервере? может, рвет соединение к upstream или к пользователю?
2) пагинация через ОРМ?
3) Debug mode что-то говорит?
Ответ написан
Комментировать
@Archusha
https://agaltsovav.ru/
Странно, для Python не свойственно такое поведение.

Пагинация сделана через Django? или через JS?

Покапай в настройках веб сервера и БД - возможно при большом запросе они рвут соединение.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы