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

转载 2004年06月30日 21:53:00

今日小弟在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

大数据从百万级别数据的分析角度,数据库如何选择?

现在需要做一个数据存储,500w左右的数据,日后每天大约产生5w条左右的数据。想把这些数据存储起来,供日后的数据分析用?使用上面说的三种数据库中的哪中比较好?是否有必要建立集群? 个人看法是:从...
  • sunjinshuang
  • sunjinshuang
  • 2015年03月16日 14:02
  • 1274

大数据量下的分页解决方法

三种主流数据库的分页语句: SQL SERVER:        String sql = "select top " + pageSize + "* from XXX where id not ...
  • hustwht
  • hustwht
  • 2016年08月10日 08:30
  • 1987

超大数据量的xlsx格式的excel文件的读取和解析,解决了POI方式的内存溢出和性能问题

在之前的博文《POI读取并解析xlsx格式的excel文件》中,在小数据量的情况下是可以轻松愉快的处理的,但是当excel文件的数据量达到百万级的时候, InputStream is = file...
  • gaoweijiegwj
  • gaoweijiegwj
  • 2017年09月14日 11:32
  • 1048

较大数据文件的读取优化过程续

由来在上一篇博客(见参考1)中写了从基本到优化的过程,但仍然有可以优化的余地,这里记录下。问题文章1中根据固定行字节数优化读取速度有很大的弊端,就是需要解析的文件可能是不规则行长度的。可以有通用的按行...
  • sunnyloves
  • sunnyloves
  • 2016年04月12日 18:39
  • 874

oracle 大数据量分页查询

(一)分页实现及性能 Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。 分页查询格式: SELECT * FROM ( SELECT A.*, ROWNUM RN ...
  • minxwy
  • minxwy
  • 2014年03月10日 18:36
  • 1593

大数据量导出Excel的方案

测试共同条件:  数据总数为110011条,每条数据条数为19个字段。  电脑配置为:P4 2.67GHz,1G内存。  一、POI、JXL、FastExcel比较  POI、JXL、FastEx...
  • xuke6677
  • xuke6677
  • 2014年02月15日 12:31
  • 5646

【Oracle】——大数据下分页方法

最近工作非常的轻松,只是做了一些小功能oracle显示分页,但是要求随着数据量的加大,不能影响系统的查询速度,这也就是要求小编在所有的解决方案中选择最好的一项。 小编先提供两种常用的分页方法 方法一、...
  • jiadajing267
  • jiadajing267
  • 2017年03月17日 13:32
  • 1028

Java读取大数据量Excel的方法(POI)

工作当中遇到要读取大数据量Excel(10万行以上,Excel 2007),用POI方式读取,用HSSFWorkbook读取时,超过2万行JVM的内存就会溢出,在网上找到原来要用XML方式逐行读取,记...
  • dhdhxgx
  • dhdhxgx
  • 2015年02月27日 11:50
  • 2755

C#使用NPOI处理大数据量EXCEl2007

日常在做项目的时候,往往不能单单使用web系统,往往要结合第三方办公软件共同来完成相关的任务,比如excel,但是excel2003和excel2007有很大的不同, excel2003只能存储65...
  • u013560667
  • u013560667
  • 2014年11月03日 09:11
  • 2965

mysql大数据量分页查询优化技巧

PS:我们知道mysql使用Limit实现了分页查询,在我们平常的Web开发中常用一些通用的分页查询jar包,比如说有名的中国开发者实现的java Pagehelper(Github地址https:/...
  • u011687186
  • u011687186
  • 2017年04月17日 16:23
  • 1297
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据量(已测500W或1000W数据)分页读取的一点心得体会
举报原因:
原因补充:

(最多只允许输入30个字)