从数据库中查询大量数据时,如果一次性返回会造成用户长时间等待,带来不好体验,以及服务器数据库查询压力,
特别是当表数据上了几十万,或者上百万上千万时,查询一次都需要花很长的时间,何况是频繁查询呢?
那么怎么解决呢?
1.数据分页返回
2.设置缓存提供返回
3.多数据库负载均衡
emm 后两种我们略过,来讲讲简单高效的分页返回
在django中,分页数据有专门的Paginator库来帮助我们解决这个问题,
可是我觉得这个库太啰嗦,我不想用它怎么办?
我有办法,你可以试着这样
在你的数据集中用切片的方式将数据一份份切割,分片返回,
实现的效果是和paginator一样的
代码如下
page:请求的页数 如:1,2,3,4,5
size:请求页数的大小 如:10,20,30,40
page ,size均在get url参数中获取,可设置默认值提供默认返回
all_data=models.datas.objects.all()[int(page)*size:int(page)*size+size]
在django序列化中,我采用了这种方法数据分片返回,既简单又高效
假如我请求的page为0 ,size默认为10,
代入切片中 它长这样子了 [int(0)*10:int(0)*10+10]
运算后得到 => [0:10] 这样就取到了10条数据然后返回即可
怎么样,是不是思路新奇,简单高效呢?哈哈,我真是个小机灵鬼呢~