# 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` 以利前端导航。 - 对高并发写入场景启用时间点快照或乐观并发控制,保障跨页一致性。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.566624s