小小的分页问题引发的加班血案

作者:架构师修行之路
来历:https://www.cnblogs.com/zhanlang/p/10851427.html

一、问题剖析

经过以上小小的分页问题引发的加班血案的对话,身为程序员的你是否也遇到过妹子这样的问题呢?传统的并且网上处处充满着的也是这类方法,客户端依据自己的翻滚不断的更新pagesize和pag小小的分页问题引发的加班血案eindex两个参小小的分页问题引发的加班血案数,然后上传给服务端接口获取数据,并且网络上也很少阐明这种方法是否有问题,那到底有没有问题呢?

谈到分页,不管程序怎样写,分页这个事务的中心动作是根小小的分页问题引发的加班血案据开端方位和完毕方位来获取一段数据,不管你的排序规矩有多杂乱,终究的意图总是获取总列表数据中一段接连的数据。不管你是直接用的sql句子分页,还用的搜索引擎(比方es),终究在客户端表现的作用便是下一页的数据展现。

当然表现在客户端的UI上的交互操作可以有许多款式:

假设是瀑布流或许app段翻滚展现的方法,或许其他标签5不需求数据总个数的状况下,菜标签5菜以为标签14服务端千万不要查询小小的分页问题引发的加班血案这个总个数数据,展现方完全可以以下一标签3页有无数据作为是否持续拉取下一页数据的依据。

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

二、问题所在

这儿以最简略也是最基本的sql 句子分页为例,假设现在数据库现有标签10数据为:

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

排序的规矩是依照巨细倒序,即数据的悉数列表为:

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

假设现在是获取第二页数据,pagesize为2,pageindex为2,正确成果为 “5,4” 。这无可厚非,标签3在数据未发作改动的状况下,正确成果的确如此,那假设数据发作的改动呢,假设现在新参加一条数据 8,列表数标签20据会变为:

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

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

分页的操作是树立标签3在动态数据上的操作!

三、处理问题

分页操作的数据源是动态变化的,有时候变化的部分正好发作在标签17你获取的数据范围内,就会发作数据重复或许过错的状况。那怎样处理呢?

3.1、客户端

作为数据的需求方和展现方,客户端需求记住现已加载的数据的主标签11键列表,假设某条数据现已展现过,依据事务需求来确认是否要重复展现,一般状况下需求去重。

假设数据量非常大,客户端保护一个数标签19据池的计划其实也不行抱负。

3.2、服务端

(1)服务端分页接口参数新增上一页最终一条数据id参数lastId,去小小的分页问题引发的加班血案掉pageindex参数,由于在大都状况下,pageindex参数在服务端的作用是确认数据的起点罢了,假设有了lastid,pageinde小小的分页问题引发的加班血案在许多状况下其实现已不需求了。

(2)服务端把一切的数据做缓存,这样动态数据在必定时间内静态化,可是这样也是治标不治本。

(3)假设事务标签19上关于排序无要求的话,服务端可以选用次序分页,把获取的数据落在不会变化的数据段上

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

3.3、事务方

不管程序怎样优化标签17也改动不了数据是在不断变化的实质,假设事务方(产品,运营)可以承受数据在偶然状况下能重复的现象,那能大幅度削减程序员的工作了。

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

Write a Comment

电子邮件地址不会被公开。 必填项已用 *标注