代码之家  ›  专栏  ›  技术社区  ›  John

分页:存储搜索结果

  •  3
  • John  · 技术社区  · 16 年前

    处理返回搜索结果的网页的正确方法是什么?搜索结果可能会在不同的时刻产生不同的结果。

    也就是说,第一次返回查询可能包含与用户单击第2页时不同的结果,然后再次运行查询。

    大多数人如何处理这种情况?通常,我使用的是内部的ASP.NET应用程序(其中安全性/带宽不是很大的问题),因此我将把结果存储在视图状态中,并在回发时处理这些数据,而不是查询数据库。

    外部WWW使用的正确方法是什么?我的最佳猜测是将结果存储在一个临时数据库表中(不是字面上的临时表;我猜“登台”可能更准确),但我认为使用inserts/deletes/etc会使该表受到相当大的冲击,我认为您需要一个过程来清理该表,这似乎不是一个非常优雅的解决方案。

    我在附近吗?

    3 回复  |  直到 16 年前
        1
  •  2
  •   brianreavis    16 年前

    大多数应用程序不处理它…他们假设结果变化不足以保证某种缓存机制。但是,如果您使用的是高度实时的数据(例如Twitter结果),那么您的分页链接很可能如下所示:

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

    …在哪里 {last result shown} 是当前页上最后一个结果的ID。此ID将用于查询早于指定ID的结果: SELECT * FROM table WHERE id < {last result shown} .

        2
  •  1
  •   Sonny Boy    16 年前

    尽管它可能占用大量内存,但您也可以考虑将搜索结果存储到会话中,并在会话中进行分页,而不是每次运行一个查询。

        3
  •  1
  •   konung    16 年前

    来个疗程怎么样?这是特定于会话的临时数据,所以为什么不使用会话?

    我已经很久没有做过ASP了(从.NET时代之前开始):-),但是在PHP或Rails中,您可以使用会话来进行类似的临时存储。您可以使用本地文件系统(在服务器上)或数据库作为会话存储。有很多方法可以优化,所以我不担心数据库会被重击,除非你有成千上万的用户。另外,DBS设计用于处理成千上万的插入和删除——任何主要的DB——SQL Server、MySQL、PostgreSQL都不应该有任何问题。