2009-11-06 4 views
3

Каков правильный способ работы с веб-страницей, которая возвращает результаты поиска, которые могут иметь разные результаты с одного момента на другой?Пейджинг: Сохранение результатов поиска

I.e. возвращая запрос, первый раз может содержать разные результаты, когда пользователь нажимает на стр. 2 и снова запускает запрос.

Как большинство людей справляется с этим сценарием? Обычно я работаю с внутренними приложениями ASP.Net (где безопасность/пропускная способность не являются огромными проблемами), поэтому я буду хранить результаты в ViewState, а в postbacks - данные, противоположные запросам базы данных.

Какова надлежащая методология для использования внешнего WWW? Мое лучшее предположение заключается в том, чтобы хранить результаты во временной таблице базы данных (не буквально в таблице temp, я думаю, что «стадия» может быть более точной), но я думаю, что таблица будет сильно забита вставками/удалениями/etc, и я думаю, вам понадобится процесс очистки стола, который не выглядит очень элегантным решением.

Я где-нибудь рядом?

ответ

2

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

?q=your+query&olderthan={last result shown}&limit=10

... где {last result shown} это идентификатор последний результат на текущей странице. Этот идентификатор будет использоваться для запроса результатов старше указанного ID: SELECT * FROM table WHERE id < {last result shown}.

+0

Я видел это много раз, и это действительное решение, но не будет работать, если вы хотите использовать POST или GET. Также для этого требуется обработка безопасности в вашем приложении - иначе кто-то может изменить URL-адрес на ограничение = 200000 - и если вы показываете список продуктов, скажем, вы можете заставить ваш сервер забивать и заморозить браузер :-) – konung

+0

Этот метод будет работать просто с запросами POST. Просто пропустите его в ''. И об ограничении предела ... Я думал, что это само собой разумеется;) – brianreavis

+0

Мне нравится концепция «старше». Запрос может быть проверен против того, что вы разрешите, или значения могут быть сохранены в представлении – John

1

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

1

Как насчет сеанса? Это временные данные, специфичные для сеанса, поэтому почему бы не использовать сеанс?

Я не делал asp в возрасте (до эпохи .NET :-)), но в PHP или рельсах вы использовали бы сеансы для любого временного хранилища. Вы можете использовать локальную файловую систему (на сервере) или БД в качестве хранилища сеансов. Есть способы оптимизации, поэтому я не буду беспокоиться о том, что DB забивается, если у вас нет тысяч пользователей. Кроме того, DBs предназначены для обработки тысяч вставок и удалений - любой основной сервер DB-SQL, MySQL, PostgreSQL не должен иметь с этим никаких проблем.

Смежные вопросы