powered by simpleCommunicator - 2.0.34     © 2025 Programmizd 02
Форумы / Обсуждение нашего сайта (архив) [закрыт] [закрыт для гостей] / Как реализована пагинация на форуме?
25 сообщений из 62, страница 1 из 3
Как реализована пагинация на форуме?
    #18217356
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По следам темы
https://www.sql.ru/forum/1177437/medlennyy-count-offset-tablica-ne-pomeshhaetsya-v-ram
У меня очень тупит пагинация (которая работает через offset)

С удивлением отмечаю, что на этом форуме промотка к любым страницам темы осуществляется моментально
Например вот эта тема из трёпа
https://www.sql.ru/forum/614262-2548/kritika-i-predlozheniya-k-moderatoram-razdela

Судя по сообщениям внизу на это уходит всего лишь 9-30 мс
Generated in 34ms. [9ms]

Не поделитесь секретом, за счёт чего тут пагинация так быстро работает?

Благодарю.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18217448
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конкретно за этот форум не скажу, но вообще можно, например, присваивать всем постам в конкретной теме порядковый номер в отдельном поле и для нужной страницы делать выборку по диапазону номеров. Конечно, при удалении постов индексы в пределах поста придется перенумеровывать, но удаление бывает редко.
Такой метод хорошо работает, когда используется только один вид сортировки.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18217589
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, наверное, это и правда самый быстрый способ.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18217790
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a,

У меня стандадтный пейджинейтор PagedList.MVC на ASP.NET+MSSQL и 25000 страниц работает мгновенно. Секрет в том что offset и limit вычисляется на клиенте при фетче, а запрос серверу отсылается один и тот-же. Тем более, что в MSSQL такой синтаксис, как у PG вообще не поддерживается.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18217851
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a > Не поделитесь vсекретом

Не растекаясь мыслью по древу,
в грубом приближении лично я бы
вообще на всё плюнул и показывал
по "pagenumber = messageid div N".

А уж потом (по жалобам и насущной
необходимости) менял алгоритм.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18217856
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

У топикастера в приведенных запросах вообще "id" нету, если заметили:)
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18218735
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter 
Zim-a,

У меня стандадтный пейджинейтор PagedList.MVC на ASP.NET+MSSQL и 25000 страниц работает мгновенно. Секрет в том что offset и limit вычисляется на клиенте при фетче, а запрос серверу отсылается один и тот-же. Тем более, что в MSSQL такой синтаксис, как у PG вообще не поддерживается.
Я с ASP.NET не знаком, и немного не понял.
Не могли бы пояснить?
Если у вас 25 000 страниц и на каждой например по 10 записей - это 250 000 записей.
Не грузится же 250 тысяч записей на клиент?
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18218750
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Zim-a > Не поделитесь vсекретом

Не растекаясь мыслью по древу,
в грубом приближении лично я бы
вообще на всё плюнул и показывал
по "pagenumber = messageid div N".

А уж потом (по жалобам и насущной
необходимости) менял алгоритм.
Что-то не понятно.
Обычно в таблице постов есть id темы.
Т.е. надо выбирать с учётом id темы.
Кроме того, у меня например нумерация не с 1 начинается (я экспериментировал и несколько первых сотен тысяч постов удалил)
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18219397
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a 
У меня очень тупит пагинация
Zim-a 
что на этом форуме ... моментально
на этом форуме mssql, там может быть, к примеру, вот это http://habrahabr.ru/post/126770/
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222547
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a 
Я с ASP.NET не знаком, и немного не понял.
Не могли бы пояснить?
Если у вас 25 000 страниц и на каждой например по 10 записей - это 250 000 записей.
Не грузится же 250 тысяч записей на клиент?
На сервере выполняется вот такой код (фэтч курсора, LINQ интерпритация, можно сделать и без LINQ-кa), где значения Skip и Take вычисляются из номера и размера страницы. Записи для нужной станицы складываются в коллекцию или json и отправляются клиенту. Запрос, как мы видим, одинаковый, никаких "where" кляуз нет, поэтому исполняется быстро.
Код: C#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void GetEmployee()
    {
        EmployeeOperationDataContext employeeContext = new EmployeeOperationDataContext();

        var employee = (from emp in employeeContext.EMPLOYEEs
                        select emp).Skip(5).Таке(10);

       /// отправить клиенту на для прорисовки
    }
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222604
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. в MSSQL SKIP работает быстро?

Это аналог OFFSET в POSTRESQL?
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222651
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a 
Т.е. в MSSQL SKIP работает быстро?

Это аналог OFFSET в POSTRESQL?
Skip и Таке делается в клиентском курсоре. Открыли курсор, начали делать фэтч с ПЕРВОЙ ЗАПИСИ, пропустили Skip(1000500 записей) нужное количество, с этого места загружаем их в коллекцию Take(10 записей), закрываем курсор, отдаем десять записией клиенту. Что не так?
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222691
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zim-a 
Т.е. в MSSQL SKIP работает быстро?

Это аналог OFFSET в POSTRESQL?
Запрос LINQ платформо-независимый и будет работать, как на MS SQL, так и на PG. Он не использует синтаксис провайдера, т.к. делает все сам, циклами. В отсутствии LINQ эти циклы нужно написать самому.
Код: C#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void GetEmployee()
    {
        EmployeeOperationDataContext employeeContext = new EmployeeOperationDataContext();

        var employee = (from emp in employeeContext.EMPLOYEEs
                        select emp).Skip(5).Таке(10);

       /// отправить клиенту на для прорисовки
    }
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222759
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter 
Skip и Таке делается в клиентском курсоре. Открыли курсор, начали делать фэтч с ПЕРВОЙ ЗАПИСИ, пропустили Skip(1000500 записей) нужное количество, с этого места загружаем их в коллекцию Take(10 записей), закрываем курсор, отдаем десять записией клиенту. Что не так?
Надо яснее выражаться. Ибо в такой формулировке
это тихий ужас и такое советовать другим нельзя.
Надеюсь, что Вы просто оговорились. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222775
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Надо яснее выражаться. Ибо в такой формулировке
это тихий ужас и такое советовать другим нельзя.
Надеюсь, что Вы просто оговорились. :)
Я советую? Отвечаю на вопрос "Как реализована пагинация на форуме?".
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222920
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пагинация на форуме реализована вовсе не таким образом. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18222997
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Пагинация на форуме реализована вовсе не таким образом. :)
Ну, дак, переделайте, как у людей.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18223114
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter> как у людей.

Как раз то, что ты описываешь - неправильно.
А сколько людей пошли таким путём - ХЗ, ССЗБ.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18227325
Zim-a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter, судя по всему у меня подобная реализация.
SKIP (он же OFFSET) работает тем медленнее чем больше его значение.
И это есть проблема.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18229892
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Не растекаясь мыслью по древу,
в грубом приближении лично я бы
вообще на всё плюнул и показывал
по "pagenumber = messageid div N".

А уж потом (по жалобам и насущной
необходимости) менял алгоритм.
Такой способ вообще не работает, потому что messageid - сквозной, не в пределах топика.

Или имеется в виду вариант miksoft. По моему, тут сделано именно так.
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18229953
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg> Такой способ вообще не работает, потому что
alexeyvg> messageid - сквозной, не в пределах топика.
alexeyvg> Или имеется в виду вариант miksoft.

Нет, я не имел в виду в отдельном поле хранить,
даже не из-за возни с дырками при удалениях.
Я имел в виду тот RowNum(), который умеет СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18229960
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, miksoft тоже нечто похожее описывает,
называя это диапазоном. Но с отдельным полем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18229987
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter 
Zim-a,

У меня стандадтный пейджинейтор PagedList.MVC на ASP.NET+MSSQL и 25000 страниц работает мгновенно. Секрет в том что offset и limit вычисляется на клиенте при фетче, а запрос серверу отсылается один и тот-же. Тем более, что в MSSQL такой синтаксис, как у PG вообще не поддерживается.
Мнгновенно - это сколько в цифрах?

Это нерабочий способ, на сервере или клиенте перебирать записи, как бы это красиво не называлось, и в какой бы синтаксис не рядилось (кстати, сиквел в новых версиях поддерживает ту же функциональность, что и PG, если вы про OFFSET ... LIMIT ... - только это не поможет, это всего лишь один из синтаксис того же самого - пронумеровать записи в массиве и взять нужные)
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18229996
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Я имел в виду тот RowNum(), который умеет СУБД.
Да? Никогда бы не подумал, прочитав "messageid div N", что это про RowNum() :-)

Но RowNum() - это нумерация массива, это медленно. Для начала я бы так и сделал, да, потому что это самое простое. Но ТС пишет про "тупит пажинация", так что ему нужно уже что то нормальное...
...
Рейтинг: 0 / 0
Как реализована пагинация на форуме?
    #18230002
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам 
Но с отдельным полем.
С отдельным полем номера записи - это по скорости то же самое, что хранить номер страницы, только более гибко, можно индивидуально настраивать количество записей на странице.

Единственный недостаток - не подходит для гибких фильтраций и сортировок... Максимум- можно хранить несколько таких полей для разных сортировок. Вот поэтому тут не делают всякие пожелания типа "не показывать сообщения какого то автора" и т.п.
...
Рейтинг: 0 / 0
25 сообщений из 62, страница 1 из 3
Форумы / Обсуждение нашего сайта (архив) [закрыт] [закрыт для гостей] / Как реализована пагинация на форуме?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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