powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / пагинация
25 сообщений из 30, страница 1 из 2
пагинация
    #40033300
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть 5 таблиц с миллионами записей
и надо свести их вместе + сделать тяжёлый фильтр
А потом, чтобы показать кол-во страниц, надо посчитать кол-во строк после этого сложного фильтра...
...которых там могут быть миллионы
Конечно легко взять одну таблицу и вытащить из неё кол-во, а потом поделить на размер страницы.
А вот как после фильтра быстро высчитать кол-во?
пагинация в этом случае вообще уместна, или просто показать первые 10 страниц (если они там есть) и кнопку "показать ещё"?
...
Рейтинг: 0 / 0
пагинация
    #40033304
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

Я в таких случаях, обычно, ставлю LIMIT 1001. Если CTE с LIMIT 1001 вернуло больше 1000 записей, то явно пишу, что так как при указанных фильтрах количество записей свыше 1000, то будут отображаться только первые 1000.

Если же действительно есть в наличии дятел, способный кликать по страницам 100 тысяч раз, то количество записей считается в том же запросе отдельным CTE.
...
Рейтинг: 0 / 0
пагинация
    #40033338
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78,

авторпагинация в этом случае вообще уместна, или просто показать первые 10 страниц (если они там есть) и кнопку "показать ещё"?

Не уместна... вообще пагинацию через offset больше чем на первые 10-20-30 страниц делать не стоит (она не будет эффективно работать а потом придет какой то гугл и пройдет вам всю базу через limit/offset и сделает вам больно).
Запросы с OFFSET линейно замедляются от размера offset поэтому offset например миллион работать быстро не будет ни при каких условиях.

авторили просто показать первые 10 страниц (если они там есть) и кнопку "показать ещё"?
показать первые 10 страниц а дальше предлагать уточнить фильтр... (например по дате или еще как то)...
точно нельзя давать через показать еще перебирать миллионы строк (почему см выше).


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
пагинация
    #40033363
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну значит всё правильно делаю
всем спасибо )
...
Рейтинг: 0 / 0
пагинация
    #40034013
alex1610
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пару лет назад здесь же задавался аналогичным вопросом. У меня были пользователи, которые периодически хотели получать N-многотысячную страницу. Решение подсмотрел тут
...
Рейтинг: 0 / 0
пагинация
    #40034031
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самое простое решение это использовать CSS для форматирования. Тогда собственно данные, даже если их миллион, будут компактны и прилетят быстро.
...
Рейтинг: 0 / 0
пагинация
    #40034033
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Самое простое решение это использовать CSS для форматирования. Тогда собственно данные, даже если их миллион, будут компактны и прилетят быстро.

Поясните идею, пожалуйста. Не может же CSS волшебным образом ускорить работу OFFSET на PostgreSQL? А здесь обсуждается именно скорость выборки только заданной части строк тяжелого запроса.
...
Рейтинг: 0 / 0
пагинация
    #40034095
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex1610
Пару лет назад здесь же задавался аналогичным вопросом. У меня были пользователи, которые периодически хотели получать N-многотысячную страницу. Решение подсмотрел тут


это ломает индексацию поисковикам и возможность адресации конкретных страниц (и вообще бесконечный скролл нравится сильно не всем, лично я его искренне ненавижу)...
а вот та же идея с next/prev ссылками - в принципе вполне рабочая (хотя конечно с индексацией там все равно грустно).



--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
пагинация
    #40034104
alex1610
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk,

Да, со всем согласен. Бездумно так делать везде не надо. Но в некоторых узких кейсах можно использовать и такой подход. Особенно если есть автоматизированные клиенты. Все зависит от задачи и требований.
...
Рейтинг: 0 / 0
пагинация
    #40034106
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к бесконечному скроллу положен фильтр
...
Рейтинг: 0 / 0
пагинация
    #40034111
alex1610
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78
к бесконечному скроллу положен фильтр


Ты выше пишешь, что у тебя уже после фильтрации миллионы записей. Поэтому я тебе предложил альтернативный быстрый вариант организации пагинации. Насколько это ui/ux - другой вопрос. Я же не знаю твоей задачи.
...
Рейтинг: 0 / 0
пагинация
    #40034149
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Не может же CSS волшебным образом ускорить работу OFFSET на PostgreSQL?

Может. Нет OFFSET в запросе - нет проблемы с его производительностью. Выборка отдаётся сразу вся, поскольку даже с миллионом записей она будет компактнее, чем пагинация с оформлением.
...
Рейтинг: 0 / 0
пагинация
    #40034152
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

А! Ну на такое некоторые разработчики действительно способны. Сам сколько раз возвращал такие перлы после code review на переделку.

Но какое отношение тупость некоторых разработчиков, приводящая к излишней нагрузке на СУБД или даже к падению веб-сервера из-за нехватки памяти, имеет к обсуждаемому вопросу?
...
Рейтинг: 0 / 0
пагинация
    #40034297
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
ptr128
Не может же CSS волшебным образом ускорить работу OFFSET на PostgreSQL?

Может. Нет OFFSET в запросе - нет проблемы с его производительностью. Выборка отдаётся сразу вся, поскольку даже с миллионом записей она будет компактнее, чем пагинация с оформлением.

при средней длине строки в 100 байт - это 100мб, на минуточку...
...
Рейтинг: 0 / 0
пагинация
    #40034298
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, а как вообще работают GRID или как их там, когда JS фильтрует таблицу?
откуда у JS данные на всю таблицу? Там их могут быть миллиарды строк...
...
Рейтинг: 0 / 0
пагинация
    #40034305
alex1610
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tip78,

На чистом js почти никто сейчас не пишет. В эру фреймворков все используют готовые компоненты. В частности, в гриде указывают источник данных и они, соответственно, подтягиваются с бэка. Могут тянуться сразу все, могут стримом. Также в гриде есть настройки и, как правило, нормальные люди ограничивают размер данных, который может придти. Соответственно, чем больше записей, тем медленнее рендерит и больше памяти жрет браузер. Если выйдет за лимиты, фронт просто упадет. Алгоритмы сортировки в разных компонентах разные.
...
Рейтинг: 0 / 0
пагинация
    #40034306
alex1610
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
+ сортировать можно на бэке. Компонент может как перезапрашивать новые данные с бэка, так и сортировать самостоятельно. Это все настраивается.
...
Рейтинг: 0 / 0
пагинация
    #40034335
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да с беком то вопросов нет, с беком не интересно
сам JS как-то слишком быстро их крутит туда-сюда
как-будто БЕЗ бека
...
Рейтинг: 0 / 0
пагинация
    #40034386
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tip78
при средней длине строки в 100 байт - это 100мб, на минуточку...

Вот именно: на современных скоростях сети это скачается меньше чем за минуточку, которая как раз и потребуется коду ява-скриптов на построение пагинации.

Ну а сказочки про память веб-сервера это явно из разряда "чтобы раздать миллиону пользователь файл размером в мегабайт требуется террабайт ОЗУ". То есть порождение фантазии людей, неспособных работать с потоками (которые stream).
...
Рейтинг: 0 / 0
пагинация
    #40034387
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
меньше чем за минуточку

Минута на открытие справочника? Вы так троллите? Нередко, десяти секунд уже хвататет на то, чтобы пользователь схватил телефон, позвонил в поддержку и начать ругаться по поводу тормозов в системе.
...
Рейтинг: 0 / 0
пагинация
    #40034390
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
"чтобы раздать миллиону пользователь файл размером в мегабайт требуется террабайт ОЗУ".

Откуда взялся мегабайт, если речь явно идет об объемах от 100 мегабайт в самом оптимичном случае? Если у ТС 10 миллионов строк и строки по килобайту, то речь о десяти гигабайтах сходу. А даже на внутренней системе сотня пользователей обычна. И они обладают особенностью грузить систему в одно и то же время. Например, сразу же после завершения расчета оптимизационной модели.

Или Вы так троллите, надеясь освободить таким хитрым образом определенную вакансию?
...
Рейтинг: 0 / 0
пагинация
    #40034459
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Нередко, десяти секунд уже хвататет на то, чтобы пользователь схватил телефон, позвонил в поддержку и начать ругаться по поводу тормозов в системе.

Браузеры достаточно умны чтобы отображать поток данных по мере их поступления, а первые записи начнут посылаться ему сразу, не так ли?..

ptr128
Откуда взялся мегабайт, если речь явно идет об объемах от 100 мегабайт в самом оптимичном случае?

Из одной статьи "специалиста по хайлоад" на хабре. Это цитата, если Вы не заметили кавычек.
...
Рейтинг: 0 / 0
пагинация
    #40034462
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
первые записи начнут посылаться ему сразу

Это вряд ли. Все зависит от того, как распараллелит запрос SQL Server и когда нужный worker выдаст результат.

Может хватить троллить? А?
...
Рейтинг: 0 / 0
пагинация
    #40034644
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ptr128
Все зависит от того, как распараллелит запрос SQL Server и когда нужный worker выдаст результат.

Но, внезапно, не зависит от наличия в запросе OFFSET.

Может, хватит тупить?..
...
Рейтинг: 0 / 0
пагинация
    #40034651
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Я не понимаю, какую цель Вы преследуете? Потроллить кого то? Доказать, что можно ценой увеличения нагрузки на SQL Server и сеть упростить жизнь веб-разработчику?
И все это только ради того, чтобы не решать задачу в целом? Вот если будет требование бизнеса о доступности в браузере миллионов записей - появится смысл обсуждать технологию достижения этой цели. Но я такого требования ни здесь не вижу, ни в жизни еще ни разу не встречал.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / пагинация
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]