---
title: GraphQL分页:Relay Cursor与Offset对比
keywords:
- GraphQL
- Relay
- Cursor
- Offset
- 分页
description: 对比 Relay Cursor 与传统 Offset 分页的正确用法与约束,指导在变更频繁的数据集上选择稳定的分页策略。
categories:
- 文章资讯
- 技术教程
---
GraphQL分页:Relay Cursor与Offset对比
概览
- Cursor 基于稳定排序字段生成不重复位置指针;Offset 依赖固定顺序下的行偏移。
- Relay Connection 规范定义
edges、pageInfo、first/after等语义,适合数据持续变更的场景。
技术参数(已验证)
- Relay Connection 规范:
edges{node,cursor}与pageInfo{hasNextPage,hasPreviousPage,startCursor,endCursor}。 - 稳定排序:使用复合键如
created_at,id保证新增/删除不会导致游标漂移;保持全局唯一与确定性顺序。 - 游标编码:常见做法 Base64;包含排序键及方向;前后向分页分别用
after/before与first/last。 - 查询性能:Offset 在大型表上会触发
OFFSET N扫描与回表;Cursor 可利用索引范围扫描、覆盖索引,降低延迟。 - 读写一致性:游标分页建议在只读视图或时间点快照下执行,避免跨页重复或遗漏。
实战清单
- 优先选择游标分页并显式稳定排序;同时提供前后向分页能力。
- 为游标字段建立联合索引;返回完整
pageInfo以利前端导航。 - 对高并发写入场景启用时间点快照或乐观并发控制,保障跨页一致性。

发表评论 取消回复