【问题标题】:Caching paginated data for scrolling interface and avoid client side duplicates为滚动界面缓存分页数据并避免客户端重复
【发布时间】:2013-09-30 10:06:07
【问题描述】:

基本上是这样设置的:

您有许多市场商品,您想按价格对它们进行排序。如果有人浏览时缓存过期,他们会突然看到潜在的重复条目。这似乎是一种非常糟糕的公共 API 体验,我们正在努力避免这个问题。

我见过的一些基本哲学包括:

  • Reddit,他们在其中跟踪客户端看到的最后一个 id,但他们仍然处理重复项。
  • Will Paginate,这是一个简单的实现,它基本上根据您想要返回的多个项目和一个偏移量返回结果
  • 然后有很多不同的解决方案,涉及到 Redis 排序集等。但这些也并不能真正解决如何删除重复条目的问题

有没有人有相当可靠的方法来处理分页排序的动态列表而不会重复?

【问题讨论】:

    标签: ruby-on-rails postgresql pagination redis


    【解决方案1】:

    如果您需要分页的项目已正确排序(在唯一值上),那么您唯一需要做的就是按该值而不是偏移量选择结果。

    简单的 SQL 示例

    SELECT * FROM items LIMIT 10; /*page 1*/
    

    假设第 10 行的 id = 42(id 是主键)

    SELECT * FROM items WHERE id < 42 LIMIT 10; /* page 2*/
    

    如果您使用的是 postgresql(可能 mysql 也有同样的问题),这也解决了使用 OFFSET 在性能方面糟糕的问题(OFFSET N LIMIT M 需要扫描 N 行!)

    如果排序不是唯一的(例如,对创建时间戳进行排序可能导致同时创建多个项目),您将遇到重复问题

    【讨论】:

      猜你喜欢
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2019-11-13
      • 1970-01-01
      相关资源
      最近更新 更多