CSDN博客

img y97523szb

大数据量(已测500W或1000W数据)分页读取的一点心得体会

发表于2004/6/30 21:53:00  3048人阅读

分类: .net相关 软件设计

今日小弟在CSDN论坛里发了个“500W数据分页性能测试”的帖子,想不到引起众多朋友的关注,于是打算写份心得体会~~~~本来测试的时候用的1000W数据测试,不过小弟的机器只有512的内存,用1000W,性能虽说也还很好,但我的机器却不能再干别的了,于是改为500W,但性能几乎没什么差别!只是1000W启动更慢,内存消耗更大~~500W消耗90多M,1000W就要消耗180多M……

帖子地址:http://community.csdn.net/Expert/topic/3132/3132779.xml?temp=9.943789E-02

首先数据量大了之后,我们先分析下,瓶颈在哪里?我们就以比较经典和流行的那个存储过程分页作为例子~~那个存储过程都干了些什么呢?他建立了一个临时内存表,用来存放ID,致使ID连贯,可以任意获取某个位置的数据,但如果数据量十分大了之后,比如500W或者1000W,即便只读ID也是很费劲的~~~那解决问题的关键就在于,如何不读这个ID,数据库那边是不好操作了,于是,我们可以把这个ID索引读到程序中来,然后根据这个索引读数据,不就快了吗?慢也就是第一次的时候慢~~ 于是,我读取了这个ID列到程序总,并组织成为一个ArrayList,然后根据访问这个AL的元素定位需要数据的真实ID,有了ID就好办了,再根据ID获取数据,还困难吗?

接下来,出现了新的问题,如果数据频繁更新怎么办?重新建立AL?不,不能怎么死脑筋,换个方式?我为什么不能在更改数据的同时更改这个AL呢?这就不用重新建立了,OK,核心思想就是这样~~

进一步就是一些麻烦的过程,还好没什么难度,只是麻烦而已,那就是每次更新数据库的同时同步更新缓存中的AL,要实现这个,是有一点麻烦~~于是我将这些操作全部封装,成了一个实体控制类,用DataRow和DataTable作为实体,内部实现了增删改的方法,并且在实现的同时,同步更新了AL

大概的原理就是这样,其实很简单,只是思路问题而已~~~

说说这个方法的缺陷吧,有,当然有,通过这个方法获取数据,获取的规则,比如排序,比如过滤,必须预先指定,不能随时更换~~~

关于进一步提高,小弟想到一个办法,还可以进一步提高性能,但现在还没实现,还在构思,就不多说了,如果实现成功再说吧,免得浪费大家的时间~~~

最后,介绍下我的这个实体控制类^_^

 1、实现了缓存加速功能,上面说的办法就是核心思想,当然也支持常规的存储过程和ID过滤方式,并且集成好了的。
2、不用XML,可以自动根据数据库结构,建立映射对象。
3、解决数据并发更新冲突(还在制作中)
4、可以根据对象建立数据表。
5、用DataTable和DataRow作为实体,我觉得蛮好,通用且方便~~~~
6、单条查询、集合查询、数据的单条和集合的“增加”“删除”“修改”这些自然是实现的了

不知道算个什么,呵呵,如果有需要的朋友可以与我联系~~~

cnlamar
hotmail.com

发表于 2004年06月30日 3:31 PM

评论

# 回复:大数据量分页读取的一点心得体会 2004-06-30 3:33 PM cnlamar
进一步提高的办法是索引分页、临时数据缓存、缓存增量更新,实现起来有点麻烦,技术难度也比比较容易,主要是麻烦,而且有点让人头晕

# 回复:大数据量分页读取的一点心得体会 2004-06-30 3:36 PM lyshe
各位在说.NET 吧。小弟没有福份了。时间紧,只好放弃先了

# 回复:大数据量分页读取的一点心得体会 2004-06-30 3:46 PM cnlamar
不一定要.net

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 4:01 PM 过路
你说将ID拿到程序中,是第一次将所有数据的ID都拿出来?

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 4:40 PM cnlamar
是的

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 6:30 PM 过路
老兄的想法确实不错,我也看了,速度也很快,
但我要说,这个不实用..为什么呢?一般列表都会有查询问题,排序问题
现在速度快的原因是因为取数据的时候按主键取PageSize条数据,当然快了.如果加个like查询,我估计会晕掉.....还有排序问题,那更不用说了...

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 6:34 PM cnlamar
缺陷就在于排序和检索条件必须是实现预订
不能中途更改,这个我好象上面说过的哦~~~呵呵,至于实用否,我想见仁见智,不是所有场合都适合,但我相信有他的应用范围,至少我有:D

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 6:35 PM cnlamar
而对于数据检索,我会提供比较常规的办法来解决这个问题

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 8:00 PM Binary
老兄,我给你发过MAIL了,速度真的不错,检索加LIKE语句的话要慢也没办法了,有的还要交差表,如果这样可能用零时表存储可能是好一点的方法,不知用零时表时能不能用ADO。NET的更新手段!!!

# 回复:大数据量(已测500W或1000W数据)分页读取的一点心得体会 2004-06-30 8:28 PM cnlamar
我打算常规方式下,按我的方法做,数据检索方式,用存储过程或者TOP过滤来做~~~目前是这样的打算

只要规则固定,我想我这个方法是可以支持多表查询的,因为似乎不牵涉到什么不能兼容的问题:D
0 0

相关博文

我的热门文章

img
取 消
img