作者 |  菜菜

责编 | 屠敏

问题分析

通过以上的对话,身为程序员的你是否也遇到过妹子这样的问题呢?传统的而且网上到处充斥着的也是这类方式,客户端根据自己的滚动不断的更新pagesize和pageindex两个参数,然后上传给服务端接口获取数据,而且网络上也很少说明这种方式是否有问题,那到底有没有问题呢?

谈到分页,无论程序怎样写,分页这个业务的核心动作是根据开始位置和结束位置来获取一段数据,无论你的排序规则有多复杂,最终的目的总是获取总列表数据中一段连续的数据。无论你是直接用的sql语句分页,还用的搜索引擎(比如es),最终在客户端体现的效果就是下一页的数据展现。

当然体现在客户端的UI上的交互操作可以有很多样式:

如果是瀑布流或者app段滚动展示的方式,或者其他不需要数据总个数的情况下,菜菜认为服务端千万不要查询这个总个数数据,展示方完全可以以下一页有无数据作为是否继续拉取下一页数据的依据。

话题回归,如果客户端依据pagesize和pageindex参数来进行分页需求,有没有问题呢?当然有,要不然菜菜写这篇文章意义何在,我又不是一个喜欢爱扯淡的程序员~~

问题所在


这里以最简单也是最基本的sql 语句分页为例,假如现在数据库现有数据为

1,2,3,4,5,6,7

排序的规则是按照大小倒序,即数据的全部列表为:

7,6,5,4,3,2,1

假如现在是获取第二页数据,pagesize为2,pageindex为2,正确结果为 “5,4”   。这无可厚非,在数据未发生改变的情况下,正确结果确实如此,那如果数据发生的变化呢,假如现在新加入一条数据 8,列表数据会变为:

8,7,6,5,4,3,2,1

那依据以上分页原则,第二页获取的数据就变为了“6,5”,聪明的你是不是发现了问题,这也可能是D妹子引发加班的原因。

分页的操作是建立在动态数据上的操作。

解决问题

分页操作的数据源是动态变动的,有时候变动的部分正好发生在你获取的数据范围内,就会发生数据重复或者错误的情况。那怎么解决呢?

客户端

作为数据的需求方和展示方,客户端需要记住已经加载的数据的主键列表,如果某条数据已经展示过,根据业务需求来确定是否要重复展示,一般情况下需要去重。

如果数据量非常大,客户端维护一个数据池的方案其实也不够理想。

服务端

  1. 服务端分页接口参数新增上一页最后一条数据id参数lastId,去掉pageindex参数,因为在多数情况下,pageindex参数在服务端的作用是确定数据的起点而已,如果有了lastid,pageinde在很多情况下其实已经不需要了。

  2. 服务端把所有的数据做缓存,这样动态数据在一定时间内静态化,但是这样也是治标不治本。

  3. 如果业务上对于排序无要求的话,服务端可以采用顺序分页,把获取的数据落在不会变动的数据段上

服务端要想把动态的数据搞成静态有点难度

业务方

无论程序怎么优化也改变不了数据是在不停变动的本质,如果业务方(产品,运营)能够接受数据在偶尔情况下能重复的现象,那能大幅度减少程序员的工作了。

有时候你认为的数据bug,在其他业务部门不一定是什么重大问题。

作者:菜菜,一个奔走在通往互联网更高之路的工程师,热衷于互联网技术。目前就职于某互联网教育公司,应用服务端主要负责人。拥有10年+互联网开发经验,热衷于高性能、高并发、分布式技术领域的研究,主要工作语言为C#和Golang 。

声明:本文为作者投稿,版权归其个人所有。

【END】

作为码一代,想教码二代却无从下手:

听说少儿编程很火,可它有哪些好处呢?

孩子多大开始学习比较好呢?又该如何学习呢?

最新的编程教育政策又有哪些呢?

下面给大家介绍CSDN新成员:极客宝宝(ID:geek_baby)

戳他了解更多↓↓↓

 热 文 推 荐 

开源需自立!Android、GitHub、Apache 全线告急!

Google Android 向华为“闭源”!华为手机迎来至暗时刻!

Linux 之父:我就是觉得苹果没意思!| 人物志

☞揭秘清华 AI 学堂班:姚期智担任首席教授,2019 年首批招收 30 人

程序员 520 脱单指南!

《使女的故事》大火,AI是背后最大推手?

☞十面九问的逆天异步神器-celery,你了解多少?

黑客亲述: "倾家荡产,是你们的事! "

Docker 系列学习文章 | 什么是容器云?

☞大神!这段代码让程序员躺赚200W,源码简单,你怎么看?

点击阅读原文,输入关键词,即可搜索您想要的 CSDN 文章。

你点的每个“在看”,我都认真当成了喜欢

程序员过关斩将:小小的分页引发的加班血案相关推荐

  1. 程序员过关斩将--自定义线程池来实现文档转码

    背景 我司在很久之前,一位很久之前的同事写过一个文档转图片的服务,具体业务如下: 1. 用户在客户端上传文档,可以是ppt,word,pdf 等格式,用户上传完成可以在客户端预览上传的文档,预览的时候 ...

  2. 程序员过关斩将--更加优雅的Token认证方式JWT

    点击上方"蓝字"带你去看小星星 菜菜,上次你讲的cookie和session认证方式,我这次面试果然遇到了 结果怎么样? 结果面试官问我还有没有更好的方式? 看来你又挂了 别说了, ...

  3. 程序员过关斩将--互联网人必备知识cookie和session认证

    菜菜,上次你说的cookie和session的文章,我觉得不太具体 那你想怎么样具体呢? 我自己从网上查了一下,很多关于cookie和session认证的,能不能给我讲讲 用户认证呀,可以呀 这样我下 ...

  4. 程序员过关斩将--cookie和session的关系其实很简单

    喜欢就点关注吧! 月高风下,下班路上.... 菜菜哥,告诉你一个秘密,但是不允许告诉任何人 这么秘密,你有男票了?~ 不是,昨天我偷偷去面试了,结果挂了 这不是好事吗,上天让公司留住你..... 好吧 ...

  5. 程序员过关斩将--Http请求中如何保持状态?

    微信搜一搜 架构师修行之路 这是一个被无数程序员撸过的问题,却只有少数人了解了真相.大体上搜了一下,网上关于http协议保持状态误导大家的文章还是有的,比如:有人说利用ViewState,那是asp. ...

  6. 程序员过关斩将--为微服务撸一个简约而不简单的配置中心

    点击上方蓝字  关注我们 毫不犹豫的说,现代高速发展的互联网造就了一批又一批的网络红人,这一批批网红又极大的催生了特定平台的一大波流量,但是留给了程序员却是一地鸡毛,无论是运维还是开发,每天都会担心服 ...

  7. 程序员过关斩将-- 喷一喷坑爹的面向UI编程

    点击上方"蓝字"关注我们 菜菜哥,求你个事呗? 说来听听,假装你男朋友可不干 不是哦,是正经事.前几天一个项目UI改了,好多人跟着加班修改,怎么样尽量避免这种情况呢? UI修改顶多 ...

  8. 程序员过关斩将--少年派登录安全的奇幻遐想

    " 据说,这篇也是快餐,完全符合年轻人口味 说到登录,无人不知无人不晓.每一个有用户体系的相关系统都会有登录的入口,登录是为了确认操作人的正确性.说到登录安全,其实是一个很伟大的命题,不过常 ...

  9. 程序员过关斩将--请不要误会redis 6.0 的多线程

    " 你对redis的单线程是不是有点误会? " 你对redis 6.0的多线程是不是也有点误会? " redis多线程一定可以提高性能吗? redis官方刚刚发布的6.0 ...

最新文章

  1. [转载]Matlab之静态文本多行输出
  2. 区块链来了|未来注定将颠覆我们的生活,你值得先看看
  3. 通过连接实例解读TCP/IP协议
  4. poj1002 字符串
  5. php ci hooks,CI框架 -- 核心文件 之 Hooks.php
  6. MySQL索引如何优化?二十条铁则送你!!!
  7. 学生管理系统——基于双向循环链表
  8. Spark API 详解(转)
  9. 【Flink】Flink 资源相关 Slot SlotPool
  10. python中的reindex_Python学习笔记(6):Pandas的reindex方法
  11. ffplay播放器移植VC的工程:ffplay for MFC
  12. centos下载和安装mongodb
  13. 二端口输入阻抗和输出阻抗
  14. 神武3登录显示未能成功连接服务器,T3安装成功后,点击运行显示登录界面,但提示“检测公共组件Protal。exe时未能通过,公共组件可能被破坏”,和”无法连接服务器“。应该怎么处理?求助!...
  15. mysql 插入字符串_MySQL插入特殊字符
  16. ubuntu下安装gfortran
  17. 虚拟机装域服务器的实训小结,虚拟机实训报告.doc
  18. Discuz 服务器重启后无法访问
  19. 写了一个计算利息和还款计划的html小工具
  20. Linux基本bash命令(持续更新)

热门文章

  1. 《编译原理》学习笔记 ·003【第二章:文法和语言(形式语言理论)-2】
  2. HDU.1010 Tempter of the Bone
  3. 矩池云使用VNC Viewer远程连接GPU主机,图形用户界面操作
  4. php版本越高越好么,php版本越高越好吗
  5. leetcode python3 简单题104. Maximum Depth of Binary Tree
  6. leetcode题库1014-- 最佳观光组合
  7. 中国内窥镜光学物镜市场趋势报告、技术动态创新及市场预测
  8. 2021-2025年中国制冷机行业市场供需与战略研究报告
  9. 2021年中国地下光缆市场趋势报告、技术动态创新及2027年市场预测
  10. 上海90后用优惠券薅羊毛45万被捕;华为再招201万元年薪“天才少年”;微软收购网络安全公司 RiskIQ|极客头条...