news 2026/9/19 13:19:03

【API 设计之道】05 列表分页模式:彻底告别 Offset 分页的性能陷阱

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【API 设计之道】05 列表分页模式:彻底告别 Offset 分页的性能陷阱

大家好,我是Tony Bai。

欢迎来到我们的专栏 《API 设计之道:从设计模式到 Gin 工程化实现》的第五讲。

在上一讲中,我们通过“字段掩码”解决了单条数据过大的传输效率问题。今天,我们把视角拉远,看看当数据量成千上万时,API 该如何高效地传输列表数据。

在早期的 Web 开发中,每当我们需要实现一个“用户列表”或“订单列表”接口时,脑海中浮现的 SQL 往往是这样的:

SELECT * FROM users ORDER BY created_at DESC LIMIT 10 OFFSET 1000;

对应的 API 参数通常是?page=100&page_size=10

这种基于偏移量(Offset-based)的分页方式,在数据量较小时(比如几千条)运行良好,且非常直观:用户想看第几页就跳到第几页。

但在云原生和海量数据时代,这种设计就像一颗定时炸弹。当数据量达到百万、千万级别时,DBA 会拿着慢查询日志找上门来;当用户在瀑布流页面(如抖音、Twitter)下拉刷新时,他们会发现数据重复出现或莫名丢失。

为什么最经典的 Offset 分页如今成了反模式?Google、Facebook、Twitter 的 API 为什么不再支持page参数,而是强制使用next_page_token

今天这一讲,我们就来彻底拆解分页的架构设计,并用 Go 实现一套高性能的游标分页(Cursor-based Pagination)机制。

痛点一:Offset 的性能塌陷

让我们复习一下 MySQL 的工作原理。当你执行LIMIT 10 OFFSET 1000000时,数据库并不是直接“跳”到第 100万 行。

数据库必须先扫描前 1,000,000 行数据,然后把它们扔掉,最后才返回接下来的 10 行。

这就好比你让一个人吃苹果,他想吃第 100 个。用 Offset 模式,他必须先把前 99 个苹果削皮、切块、拿起来,然后再扔进垃圾桶,最后才吃第 100 个。

随着OFFSET值的增加,查询时间是呈线性增长的。这就是著名的Deep Pagination(深度分页)性能问题。

痛点二:数据漂移 (Data Drift)

性能慢还能忍,但数据不一致则是严重的业务 Bug。

想象一个新闻 App 的场景:

  1. 用户打开 App,加载了第 1 页(最新的 10 条新闻)。

  2. 在用户阅读期间,后台编辑又发布了5 条新新闻

  3. 用户看完当前页,上滑加载第 2 页(OFFSET 10)。

此时会发生什么?

由于新插入了 5 条数据,原本第 1 页的后 5 条数据,现在被“挤”到了第 2 页的位置。

结果:用户在第 2 页看到了刚刚在第 1 页已经看过的 5 条新闻。

同理,如果有数据被删除,用户在翻页时就会漏掉数据。对于追求极致体验的移动端应用,这是不可接受的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 13:30:16

Wu.CommTool 通讯调试工具完全指南

Wu.CommTool 通讯调试工具完全指南 【免费下载链接】Wu.CommTool 基于C#、WPF、Prism、MaterialDesign、HandyControl开发的通讯调试工具,,支持Modbus Rtu调试、Mqtt调试 项目地址: https://gitcode.com/gh_mirrors/wu/Wu.CommTool 为什么你需要这款通讯调试…

作者头像 李华
网站建设 2026/9/17 2:38:13

ESP32无人机合规识别终极方案:ArduRemoteID开源项目完整指南

ESP32无人机合规识别终极方案:ArduRemoteID开源项目完整指南 【免费下载链接】ArduRemoteID RemoteID support using OpenDroneID 项目地址: https://gitcode.com/gh_mirrors/ar/ArduRemoteID 面临FAA无人机识别法规的合规难题?ArduRemoteID为您提…

作者头像 李华
网站建设 2026/9/18 9:55:49

AutoGPT在跨境电商中的落地场景:多语言产品描述自动生成

AutoGPT在跨境电商中的落地场景:多语言产品描述自动生成 在跨境电商的日常运营中,一个看似简单却极其耗时的任务正悄然吞噬着团队的时间与预算——为同一款商品撰写十几种语言的产品描述。更棘手的是,这些文案不能只是“翻译”,而…

作者头像 李华
网站建设 2026/9/19 11:25:07

雀魂数据分析工具:从入门到精通的实战指南

雀魂数据分析工具:从入门到精通的实战指南 【免费下载链接】amae-koromo 雀魂牌谱屋 (See also: https://github.com/SAPikachu/amae-koromo-scripts ) 项目地址: https://gitcode.com/gh_mirrors/am/amae-koromo 在当今数据驱动的麻将竞技环境中&#xff0c…

作者头像 李华
网站建设 2026/9/18 14:47:06

告别碎片化:用Weread同步插件重构你的阅读笔记体系

作为一名深度阅读爱好者,你是否曾经在微信读书中留下了无数精彩的高亮和想法,却在需要整理时发现它们散落在不同的书籍和章节中?😅 这种碎片化的笔记体验,正是Weread同步插件想要彻底解决的痛点。 【免费下载链接】obs…

作者头像 李华
网站建设 2026/9/18 23:30:13

批量网页访问终极指南:免费开源工具的全新体验

批量网页访问终极指南:免费开源工具的全新体验 【免费下载链接】Open-Multiple-URLs Browser extension for opening lists of URLs built on top of WebExtension with cross-browser support 项目地址: https://gitcode.com/gh_mirrors/op/Open-Multiple-URLs …

作者头像 李华