news 2026/8/28 8:36:30

【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/8/24 22:56:06

21、Nagios Core 安全与性能优化指南

Nagios Core 安全与性能优化指南 一、CGI 访问控制 在配置 Apache 时,我们可以通过以下配置来严格控制对 CGI 的访问: Require valid-user Order Allow,Deny Deny from all Allow from 127.0.0.0/16 Allow from 10.128.0.1 </Directory>上述配置仅允许本地地址和 …

作者头像 李华
网站建设 2026/8/28 2:27:43

ESP-HI机器狗完整教程:从零搭建你的百元级AI伙伴

ESP-HI机器狗完整教程&#xff1a;从零搭建你的百元级AI伙伴 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 还在为传统机器狗动辄数千元的高昂成本而望而却步吗&#xff1f;还在为复杂的运…

作者头像 李华
网站建设 2026/8/26 19:52:44

SM3算法PHP实现实战指南:从零精通国产加密技术

在当今信息安全日益重要的时代&#xff0c;国产密码算法SM3凭借其卓越的安全性能和广泛的应用前景&#xff0c;正在成为PHP开发者必须掌握的关键技术。本文将带领你从基础概念到实战应用&#xff0c;全面掌握SM3算法的PHP实现。 【免费下载链接】SM3-PHP 国密标准SM3的PHP实现 …

作者头像 李华
网站建设 2026/8/27 12:22:15

Verible完整指南:SystemVerilog开发的5大核心利器

Verible完整指南&#xff1a;SystemVerilog开发的5大核心利器 【免费下载链接】verible Verible is a suite of SystemVerilog developer tools, including a parser, style-linter, formatter and language server 项目地址: https://gitcode.com/gh_mirrors/ve/verible …

作者头像 李华
网站建设 2026/8/26 19:25:19

Android设备唯一标识终极指南:快速获取合规OAID的完整教程

Android设备唯一标识终极指南&#xff1a;快速获取合规OAID的完整教程 【免费下载链接】Android_CN_OAID 安卓设备唯一标识解决方案&#xff0c;可替代移动安全联盟&#xff08;MSA&#xff09;统一 SDK 闭源方案。包括国内手机厂商的开放匿名标识&#xff08;OAID&#xff09;…

作者头像 李华
网站建设 2026/8/28 2:38:57

WechatHook完整指南:掌握微信自动化开发终极方案

WechatHook是一个基于模块化框架和Android辅助功能技术的开源项目&#xff0c;为开发者提供了强大的微信自动化控制能力。通过深度定制微信功能&#xff0c;该项目实现了智能回复、位置修改、自动操作等多种实用功能&#xff0c;为微信生态开发提供了丰富的技术参考。 【免费下…

作者头像 李华