python数据库优化方法(海量数据集分页优化)

学过Django框架的同学,一定都使用过Django框架的Paginator分页功能,今天我们要讨论的是关于使用Paginator进行大数据集分页时,它性能的优化问题。

Paginator分页

下面步入正题,首先我们来看一个Django中使用Paginator进行分页的例子:

1)首先我创建了一个Django项目并定义了一个User用户模型类

python数据库优化方法(海量数据集分页优化)(1)

2)执行迁移在数据库中生成tb_users用户表并添加800万个测试用户数据

python数据库优化方法(海量数据集分页优化)(2)

3)编写使用Paginator类进行分页的测试代码,并测试获取相应页的数据

python数据库优化方法(海量数据集分页优化)(3)

4)分页测试代码执行完成之后,我们来看终端输出的内容

python数据库优化方法(海量数据集分页优化)(4)

5)对于上面的分页测试结果,我们再来看一下mysql的日志记录数据

python数据库优化方法(海量数据集分页优化)(5)

注:mysql的日志文件在/var/log/mysql/mysql.log,测试之前可以先使用tail -f /var/log/mysql/mysql.log打开这个文件,测试之后就可以看到对应输出的日志信息

6)看完上面的内容之后,接下来我们就可以看Django框架关于Paginator类分页的官网文档了

python数据库优化方法(海量数据集分页优化)(6)

上面红色框框里的提示就是告诉我们,在使用Paginator对大数据量的QuerySet进行分页时,如果请求页码较大的某页数据时,查询效率可能会很慢,因为Limit/Offset分页时,先要根据Offset偏移量从前向后扫描数据

分页问题解决

好,说了这么多,最后的问题要来了,怎么解决这个问题呢?下面咱们来说一个很多大厂使用的解决方案,什么方案呢,会不会很高大上呢?

其实很简单,就是限制用户请求的最大页数,比如只允许用户访问前100页的数据,如果请求的页码超过100页,可以默认返回第1页的数据,这样就不会有上面的问题,是不是很简单呢。这个思想也很简单,大家平时搜索内容或购买商品时,是不是只会浏览前几页的内容呢?不用我回答,你应该已经有了答案

小知识:百度搜索内容显示时,只允许用户访问前76页的内容;淘宝搜索上面商品显示时,只允许用户访问前100页的内容。

最后,怎么知道这个解决方案的?其实还是在文档,大家请看

python数据库优化方法(海量数据集分页优化)(7)

建议大家平时自己多看文档,授人以鱼不如授人以渔,假以时日,这就是你的渔

好啦,关于大数据集分页的问题,咱们今天就说到这,有没有其它方案呢?大家可以多去探索

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。