一种处理分页控件和绑定数据方法
技术背景:
分页绑定数据有很多种方法,不管在数据后台还是前台都能实现包括利用存储过程等方法。基于目前常利用的就是分页控件加存储过程实现,但在实现的过程中还是有些弊端存在,比如写一个类来存分页的所有属性,这样处理数据会有一点或多或少的问题。加载数据处理缓慢特别是针对大型数据信息时。有时还得下功夫优化数据库以及代码等功能。
虽然利用一种直接通过函数方法传递分页的参数来实现还是比较合理的,在对于处理页面有两个分页控件时特别是有上分页和下分页控件还有对一个页面有数据绑定页面还有查询操作功能来说,对数据的处理更合理完整,不会出现什么BUG问题,对于查询时传递的参数过多时,还有在点击两个分页控件时传递的分页参数也准确的展现出数据的完整性单参数过多或造成服务器一定的压力。利用一种新的分页显示方法来解决数据分页绑定。
技术方法:
1:设定每页显示的数据记录
2:对数据进行页号处理
3:如果每页显示的数据多于设定的数据记录,将多出的数据页号变更为下一页的页号。
采用此方法无论打开数据那一页的数据,都选取指定的页号记录,系统消耗资源低,检索速度快,页面加载数据快。
针对页号处理就是在数据表中加入记录叶序的页号字段,按照设定的每页数据记录数给数据设定页号值。
常用的表设计如下:
ID |
字段1 |
字段N |
时间 |
1 |
Test1 |
… |
2012-12-01 12:01:15 |
2 |
Test2 |
… |
2012-12-08 16:33:35 |
3 |
Test3 |
… |
2012-12-12 10:01:05 |
4 |
Test4 |
… |
2012-12-18 12:35:30 |
5 |
Test5 |
… |
2012-12-17 10:01:09 |
…. |
数据表室友若干个字段组成的,ID是常用来自动增长字段,每增加一新记录该字段就自动递增,还有个就是常用的时间字段值。
目前分页显示常用的方法显示有以下几种:
按ID号计算页面ID区间值方法,如果每页显示10条,则第一页ID区间显示记录为1-10,第二页显示11-20,以此类推。在读取数据时只从数据表中取得ID号>=最小ID号,并<=最大ID号记录。
这种方法ID号需要连续,如果中间有删除数据记录,由于ID不重排特性,读取有删除记录的ID区间数据不准确性。
如果数据中有分类的字段 分类中的内容ID不是连续排列的,无法确定ID区间。
有时候为了是最新信息显示到最前面,一般使用最后的ID或者最后的时间(创建时间或者更新时间之类)进行DESC倒序排列
ID |
字段1 |
字段2 |
字段N |
时间 |
4 |
分类1 |
Test4 |
… |
2012-12-18 12:35:30 |
5 |
分类2 |
Test5 |
… |
2012-12-17 10:01:09 |
3 |
分类2 |
Test3 |
… |
2012-12-12 10:01:05 |
2 |
分类1 |
Test2 |
… |
2012-12-08 16:33:35 |
1 |
分类2 |
Test1 |
… |
2012-12-01 12:01:15 |
|
…. |
可以看出数据ID不连续,不断增改数据会ID排序无规律,无法区分按ID号区间分页。
还有其他方法利用存储过程直接分页 ,但处理庞大数据过程时页面加载就缓慢 处理数据性能偏低,优化代码和数据也比较麻烦。
如果想要解决上述方法就需要一种特殊处理方法。
1:设定每页显示的数据记录
2:对数据进行页号处理
3:对于分类数据进行页号处理,按照设定的每页显示数据记录给数据设定页号值。无论打开数据表哪一页数据,都会选取指定的页号数据记录,系统资源消耗低,由于页号字段的数据检索条件简单 速度也非常快。
改进数据表结构设计:
ID |
字段1 |
字段2 |
字段N |
时间 |
页号 |
4 |
分类1 |
Test4 |
… |
2012-12-18 12:35:30 |
1 |
5 |
分类2 |
Test5 |
… |
2012-12-17 10:01:09 |
2 |
3 |
分类2 |
Test3 |
… |
2012-12-12 10:01:05 |
1 |
2 |
分类1 |
Test2 |
… |
2012-12-08 16:33:35 |
2 |
1 |
分类2 |
Test1 |
… |
2012-12-01 12:01:15 |
1 |
|
…. |
|
按分类、 时间、页号排列如下所示:
ID |
字段1 |
字段2 |
字段N |
时间 |
页号 |
4 |
分类1 |
Test4 |
… |
2012-12-18 12:35:30 |
1 |
2 |
分类1 |
Test2 |
… |
2012-12-08 16:33:35 |
2 |
3 |
分类2 |
Test3 |
… |
2012-12-12 10:01:05 |
1 |
1 |
分类2 |
Test1 |
… |
2012-12-01 12:01:15 |
1 |
5 |
分类2 |
Test5 |
… |
2012-12-17 10:01:09 |
2 |
|
…. |
|
首先对各分类数据页号处理,使其按照设定的每页显示记录条数赋上对应的页号值。例如分类1数据的第一页已有10条记录,设定每页显示10条记录。当每增加一条记录或更新现有非第一页的记录时,该条记录的页号显示为1,此时第一页将有11条记录。当用户打开第一页记录时,选取页号为1页的记录(共11条),当显示到第11条时,超过设定的记录,将页号改为2,此时第一页恢复为10条记录,第二页增加一条记录。同理,当打开第二页时,如果超过每页设定的记录数时,则超过的记录的页号自动变更为下一页页号,以此类推。
同时可以采用一种对于长期不用的数据和不动的静态数据进行封存,判断根据创建时间或最后更新时间来比对当前时间是否超过 设定的5-10年期间,如果在5-10年期间某些数据依然为静态数据,此时就不在显示此类数据记录,这样大大的减少了数据的读取速度和缓冲速度,减少操作数据对服务器的负担。
采用此方法对于日益需求数据的数据量的增长对于数据打开速度没有明显增加。