1

基本上这里是设置:

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

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

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

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

4

1 回答 1

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 行!)

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

于 2013-10-03T21:09:54.427 回答