基于Python的大数据的分页模型代码
最近在写一个cmdb系统的分页,尽管Django本身有分页的模块儿,但是还是想实现一下自己心中想的分页的一种逻辑
因为,在我们工作当中,当我们的数据量超级大的时候,其实我们每次分页查询都不必将所有的数据查询出来,而是可以按阶段的查询,举个例子
每次查询5页数据,当需要第六页的时候,再次进行加载,为了更加明了,做了举例
首先我们规定好每次查询5页,每页4条数据
db_data = list(range(1,100)) final_page = len(db_data) one_page_num = 5 #每页4条
one_time_num = 5 #每次查5页
1、查询索引的逻辑 设定findIndex查询的索引
# page = 1 int(1/5) + 1 findIndex = 1
# page = 2 int(2/5) + 1 findIndex = 1
# page = 3 int(3/5) + 1 findIndex = 1
# page = 4 int(4/5) + 1 findIndex = 1
# page = 5 int(5/5) findIndex = 1
# page = 6 int(6/5) + 1 findIndex = 2
# page = 7 int(7/5) + 1 findIndex = 2
# page = 8 int(8/5) + 1 findIndex = 2
# page = 9 int(9/5) + 1 findIndex = 2
# page = 10 int(10/5) findIndex = 2
# page = 11 int(11/5) + 1 findIndex = 3
# page = 12 int(12/5) + 1 findIndex = 3
# page = 13 int(13/5) + 1 findIndex = 3
# page = 14 int(14/5) + 1 findIndex = 3
# page = 15 int(15/5) findIndex = 3
所以我们可以写如下代码
if page/one_time_num > int(page/one_time_num):
findIndex = int(page / one_time_num) + 1
else:
findIndex = int(page / one_time_num)
#进行第一次查询,查询每次5页,每页4条的数据
select_num = one_time_num * one_page_num #这里决一次定查询20条
select_start = (findIndex - 1) * select_num # 开始查询的索引
select_down = findIndex * select_num # 结束查询的索引
select_data = db_data[select_start: select_down] #这里查询出了一次20条数据
这个时候是查询出20条数据了,但是,我们想要的具体的数据和页码对不上,所以做了以下的数据
#下面对20条数据进行截取
#findIndex 1
# page = 1 1-(0*5) gnPage = 1
# page = 2 2-(0*5) gnPage = 2
# page = 3 3-(0*5) gnPage = 3
# page = 4 4-(0*5) gnPage = 4
# page = 5 5-(0*5) gnPage = 5
#findIndex 2
# page = 6 6-(1*5) gnPage = 1
# page = 7 7-(1*5) gnPage = 2
# page = 8 8-(1*5) gnPage = 3
# page = 9 9-(1*5) gnPage = 4
# page = 10 10-(1*5) gnPage = 5
#findIndex 3
# page = 11 11-(2*5) gnPage = 1
# page = 12 12-(2*5) gnPage = 2
# page = 13 13-(2*5) gnPage = 3
# page = 14 14-(2*5) gnPage = 4
# page = 15 15-(2*5) gnPage = 5
所以我们可以得到以下代码来获取具体的一页数据
#设定 截取的索引位now_index
now_index = page - (findIndex-1)*one_time_num
#设定单页的截取起始
page_start = (now_index - 1) * one_page_num
page_end = now_index * one_page_num
#开始截取
page_data = select_data[page_start:page_end]
最后进行代码结合
#coding:utf-8 db_data = list(range(1,100)) one_page_num = 5 #每页4条
one_time_num = 5 #每次查5页 while True:
page = int(input("page >>>")) #输入页码 #查询索引的逻辑 设定findIndex查询的索引
# page = 1 int(1/5) + 1 findIndex = 1
# page = 2 int(2/5) + 1 findIndex = 1
# page = 3 int(3/5) + 1 findIndex = 1
# page = 4 int(4/5) + 1 findIndex = 1
# page = 5 int(5/5) findIndex = 1
# page = 6 int(6/5) + 1 findIndex = 2
# page = 7 int(7/5) + 1 findIndex = 2
# page = 8 int(8/5) + 1 findIndex = 2
# page = 9 int(9/5) + 1 findIndex = 2
# page = 10 int(10/5) findIndex = 2
# page = 11 int(11/5) + 1 findIndex = 3
# page = 12 int(12/5) + 1 findIndex = 3
# page = 13 int(13/5) + 1 findIndex = 3
# page = 14 int(14/5) + 1 findIndex = 3
# page = 15 int(15/5) findIndex = 3 if page/one_time_num > int(page/one_time_num):
findIndex = int(page / one_time_num) + 1
else:
findIndex = int(page / one_time_num)
#进行第一次查询,查询每次5页,每页4条的数据
select_num = one_time_num * one_page_num #这里决一次定查询20条
select_start = (findIndex - 1) * select_num # 开始查询的索引
select_down = findIndex * select_num # 结束查询的索引 select_data = db_data[select_start: select_down] #这里查询出了一次20条数据 #下面对20条数据进行截取
#findIndex 1
# page = 1 1-(0*5) gnPage = 1
# page = 2 2-(0*5) gnPage = 2
# page = 3 3-(0*5) gnPage = 3
# page = 4 4-(0*5) gnPage = 4
# page = 5 5-(0*5) gnPage = 5
#findIndex 2
# page = 6 6-(1*5) gnPage = 1
# page = 7 7-(1*5) gnPage = 2
# page = 8 8-(1*5) gnPage = 3
# page = 9 9-(1*5) gnPage = 4
# page = 10 10-(1*5) gnPage = 5
#findIndex 3
# page = 11 11-(2*5) gnPage = 1
# page = 12 12-(2*5) gnPage = 2
# page = 13 13-(2*5) gnPage = 3
# page = 14 14-(2*5) gnPage = 4
# page = 15 15-(2*5) gnPage = 5
#设定 截取的索引位now_index
now_index = page - (findIndex-1)*one_time_num
#设定单页的截取起始
page_start = (now_index - 1) * one_page_num
page_end = now_index * one_page_num
#开始截取
page_data = select_data[page_start:page_end]
#输出效果
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
print("当前是第%s次查询"%findIndex)
print("当前查询到的所有数据是 \n %s" % select_data)
print("当前是 %s 页" % page)
print("当前的数据是 \n %s " % page_data)
print("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++")
大家试一下吧。
基于Python的大数据的分页模型代码的更多相关文章
- MySQL大数据量分页查询方法及其优化
MySQL大数据量分页查询方法及其优化 ---方法1: 直接使用数据库提供的SQL语句---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N---适 ...
- 大数据实时处理-基于Spark的大数据实时处理及应用技术培训
随着互联网.移动互联网和物联网的发展,我们已经切实地迎来了一个大数据 的时代.大数据是指无法在一定时间内用常规软件工具对其内容进行抓取.管理和处理的数据集合,对大数据的分析已经成为一个非常重要且紧迫的 ...
- 给Ambari集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解)
不多说,直接上干货! Impala和Hive的关系(详解) 扩展博客 给Clouderamanager集群里安装基于Hive的大数据实时分析查询引擎工具Impala步骤(图文详解) 参考 horton ...
- 【Python开发】Python 适合大数据量的处理吗?
Python 适合大数据量的处理吗? python 能处理数据库中百万行级的数据吗? 处理大规模数据时有那些常用的python库,他们有什么优缺点?适用范围如何? 需要澄清两点之后才可以比较全面的看这 ...
- Python/Numpy大数据编程经验
Python/Numpy大数据编程经验 1.边处理边保存数据,不要处理完了一次性保存.不然程序跑了几小时甚至几天后挂了,就啥也没有了.即使部分结果不能实用,也可以分析程序流程的问题或者数据的特点. ...
- Access大数据高效分页语句
Access大数据高效分页语句 oracle的分页查询可以利用rowid伪列. db2的分页查询可以利用row_number() over()聚合函数. mysql有limit. access仿佛先天 ...
- 高速基于echarts的大数据可视化
[Author]: kwu 高速基于echarts的大数据可视化,echarts纯粹的js实现的图表工具.高速开发的过程例如以下: 1.引入echarts的依赖js库 <script type= ...
- 软工之词频统计器及基于sketch在大数据下的词频统计设计
目录 摘要 算法关键 红黑树 稳定排序 代码框架 .h文件: .cpp文件 频率统计器的实现 接口设计与实现 接口设计 核心功能词频统计器流程 效果 单元测试 性能分析 性能分析图 问题发现 解决方案 ...
- 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素
package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...
随机推荐
- 关于找不到指定的模块,异常来自HRESULT:0x8007007E的解决方法
上午从公司前辈那里拷贝到的ASP.NET代码,在自己机器上部署的时候发现问题,直接报错,找不到指定的模块,异常来自HRESULT:0x8007007E.并且一大堆警告. 在网上百度很多解决方法,归纳如 ...
- Codeforces1107E. Vasya and Binary String
题目链接 本题也是区间dp,但是需要保存的信息很多,是1还是0,有多少个连续的,那我们可以预处理,将所有的连续缩合成1个字符,那么字符串就变成了一个01交替的串,我们任意的消除1个部分,一定能引起连锁 ...
- 「JSOI2015」最大公约数
「JSOI2015」最大公约数 传送门 考虑先枚举区间左端点, 然后我们会发现所有可能的区间虽然有 \(O(n)\) 个,但是本质不同的区间 \(\gcd\) 只有 \(\log n\) 级别,而且是 ...
- VIM学习笔记一
键位图 转自:链接 永久显示行号: vi ~/.vimrc 加入 :set number 命令 简单说明 :w 保存编辑后的文件内容,但不退出vim编辑器.这个命令的作用是把内存缓冲区中的数据写到启动 ...
- 【剑指Offer面试编程题】题目1507:不用加减乘除做加法--九度OJ
题目描述: 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入为两个整数m和n(1<=m,n<=10 ...
- 37 java序列化与反序列化
一.java序列化与反序列化 1.序列化: 是指把java对象转换为字节序列的过程: 2.反序列化:是指把字节序列恢复为java对象的过程. 二.为什么要序列化 我们知道,当两个进程进行远程通信时,可 ...
- [转]简单总结一下解决 添加 inline-block 后多出来的空隙
添加 inline-block 后: 查询.借鉴的原网址:http://www.zhangxinxu.com/wordpress/?p=2357 html 结构: <ul class=" ...
- 设计模式课程 设计模式精讲 22-2 备忘录模式coding
1 代码演练 1.1 代码演练1 1 代码演练 1.1 代码演练1 需求: 网站笔记需要存储快照,能实现回退的功能. 注意: a 设计的时候,可以分为笔记类,笔记快照类和 笔记快照管理类 三个类. ...
- 121、Java面向对象之使用this关键字明确地表示访问类中的属性
01.代码如下: package TIANPAN; class Book { private String title; private double price; public Book(Strin ...
- 解决Python2中文ascii编码的方法
在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...