#database #postgresql #reporting #report
#База данных #postgresql #отчетность #Сообщить
Вопрос:
В настоящее время у меня есть клиент-серверное приложение. Клиент должен иметь возможность генерировать отчеты. Эти отчеты могут содержать миллионы записей. Каков наилучший способ передачи данных клиенту? Отправка всех миллионов записей одновременно не очень эффективна. Допустим, я просто хочу отображать 20 одновременно и просматривать все результаты. Должен ли я, чтобы сервер выполнял запрос каждый раз, когда пользователь нажимает на следующую страницу, или я должен заставить сервер получать весь набор результатов, а затем отправлять его части клиенту?
Комментарии:
1. Ознакомьтесь с разделением на страницы
2. Достаточно справедливо. Каков наилучший способ передать весь отчет (миллионы записей) из базы данных клиенту без проблем с памятью? Транслировать его? Эта опция необходима, если пользователь хочет загрузить весь отчет в файл.
3. Пусть сервер получает 20 результатов одновременно.
Ответ №1:
Используйте курсор — он идеально подходит для этих целей.
Примечание — отчет с миллионом строк не является хорошо разработанным отчетом. Никто не может это обработать. Но это вопрос к аналитику.
Ответ №2:
Я использовал Limit в sql-запросе, чтобы задать диапазон извлекаемых записей. но запрос должен исходить от клиента, и запрос должен передавать диапазон.
Это зависит от сценариев, если вы используете соединитель Dotnet npgsql
- Я бы сгенерировал номер страницы в поле со списком в форме
- Затем умножьте номер страницы на строки *(число страниц-1) (20 * 1 для страницы 2), чтобы получить начальное число строк
- Передайте его в форме sql в базу данных
- Извлекать строки и отображать в datagridview
Хотя, я мог бы просто добавить, поиск по миллиону записей Page_by_page не является мудростью. я надеюсь, что есть несколько фильтров, чтобы сузить поиск до нескольких страниц. Поскольку исследования показывают, что просмотры за пределами страницы 10 падают экспоненциально.