分页的技术已经很成熟了,但我一直是半瓶水,以前经常用脚本和HTML控制分页,现在在.NET的中的几个分页控件也都用的基本烂熟,但我在想,如果一个论坛有20万以上海量级的帖子怎么能很好的显示,并做到网页加载时候速度不慢呢,我在想,用脚本和DOM,加XML文件来控制,把帖子的内容和回复都写如XML文件,数据库只用来保存帖子的标题,呈现帖子的时候,只接从XML文件读取帖子,这样来减轻数据库的负担,这个是我想的一种办法,我正在做试验。
   另外,用DataList,Repeater,和GridView怎么样呢?我们团队平时给别人的做的网站,基本没有没有涉及海量技术的问题,所以平时用这些控件做的分页也没看出网页速度的问题。关于GridView的分页已经方便的不能再方便了,但现在问题是怎么控制性能,如果单纯用GridView来控制海量级的数据效果会怎么样,我知道在数据库的设计上和缓存要做到绝对的优才能减轻负担,这个我也在尝试中。
   目前大型网站中的论坛(包裹CSDN)里面用到的分页技术,都做的非常不错,凡是从事WEB开发的,这个问题,相信大家都有研究吧,我们怎么把这些网站的技术掌握呢?希望牛人把这些技术拿来和大家分享呢?
   我的问题是:
      1  在.NET平台下,什么样的分页技术可以读取取海量帖子?
      2  用GridView读取海量技术怎么样?怎么实现?
      3  JS+DOM+XML+数据库设计+C#+DataList,Repeater,和GridView 这些综合技术
         来做分页读取海量数据的帖子怎么样呢,具体怎么实现?
    还有一个问题:用DataList做分页,我一直没有实现这个效果:就是数据读出来的时候,用1 2 3 4 5 6 7 8 9 10 ... 实现分页效果。请已经实现这个效果的技术朋友给点指点,怎么实现这个效果。以上问题,希望大家踊跃参与,分享技术,同时小弟也不胜感激。如果对分页还没入门的朋友,我可以免费提供我所知道的分页技术,我手头上有20几种我以前做过的实例。邮箱发上来就可以了。最后谢谢大家的参与,感谢大家分享技术。
3天后JT
              

解决方案 »

  1.   

    谢谢楼主,请给我发一份
    email:
    [email protected]
      

  2.   

    也给我发一份!谢谢了!
    Email:[email protected]
      

  3.   

    [email protected]  谢谢了
      

  4.   

    谢谢楼主,请给我发一份
    email:
    [email protected]
      

  5.   

    谢谢楼主了,请给我发一份把。
    [email protected]
      

  6.   

    use lazy binding to load the current reading page(s) only
      

  7.   

    数据库的优化,用什么方式都要的
    对于海量应该用,分页的存储过程,如果你用的是SQL2005,它有提供分页功能.
    如果就几百上千条,用DATASET.FILL的分页看不大出来.
    对于想建设高性能的WEB应用程序,那就要合理使用服务端控件了,控件绑定的功能越多,它耗费的资源就相对大点.如Gridview>DataList>Repeater.
    太多了,说不完.
    至于你说的XML+XLST显示论坛页面,这个就是CSDN版面的技术,它是在客户端解析显示的.如果你用服务端,那还不如直接用数据库呢
      

  8.   

    分页 技术的 关键 不是在于 使用 什么控件而是 应该在 数据库端 就 做好处理 
    可以 参考http://blog.csdn.net/hertcloud/category/281167.aspx
      

  9.   


    1、什么样的分页技术可以读取取海量帖子?什么样的技术都可以读取海量数据(GridView除外)。至于速度快慢,最重要的因素是设置合理的索引。如果不利用索引的话,20万以上的数据,任何分页算法都是读不出来的(连接超时的错误)。2、用GridView读取海量技术怎么样?怎么实现?GridView 是显示数据的,要SqlDataSource 来配合才行。读少量的还可以,多了就很慢了。3、JS+DOM+XML+数据库设计+C#+DataList,Repeater,和GridView 这些综合技术来做分页读取海量数据的帖子怎么样呢,具体怎么实现?
    其实分页算法弄好了,根本不用这么费劲。
    csdn 的 XML 文件并不是要解决分页的,而是解决asp 或 asp.net 这样的动态组合html太占用cpu的问题,他和分页是没有关系的。分页技术不在于多,而在于 “实用”和好用。
    对了可以参考这里http://blog.csdn.net/jyk/archive/2007/03/01/1518354.aspx
      

  10.   

    其实跟Web里面的DataGrid分页差不多的,更确切的说要比Web里面更简单一些,这就要看你对分页的原理了不了解了。可以用微软提供的DataGrid控件来解决分页问题,不需要使用第三方控件。
    楼主可以先到我的小论坛去熟悉一下分页的基本概念。(显示帖子页面,查看回复页面)
    www.xproer.com/bbs
    然后我再跟你讲解一下目前最简单的一种分页方法。通常我们为了考虑分页SQL语句的性能,最好使用四个按钮来实现分页。
    首页,上一页,下一页,尾页
    这四个按钮事件内部分页用四条SQL语句来实现从数据库中读取相应的数据。通常我们的数据表中有ID列,这个基本上是用来分页的。如果我们的数据显示形式是从最新的到最旧的显示方式:
    ID显示:
    100
    99
    98
    97
    96
    95
    94
    93
    92
    91
    90
    89
    88
    87
    86
    85
    84
    83毫无疑问,首页是前10条(假设一页显示10条数据)是从100开始到91,这个SQL最简单:select top 10 from Table1 order by ID DESC        (这个这是首页的SQL语句)那么下一页就是ID要比91小的前10条数据,select top 10 from Table1 where ID<@ID order by ID DESC   (这是下一页SQL语句)尾页SQL语句也是超简单select top 10 from Table1 order by ID ASC          (这个是尾页)上一页SQL语句select top 10 from Table1 where ID>@ID order by ID DESC  (上一页SQL语句)好了,基本分页SQL语句搞定了,那么重要的就是如何取到这些ID值,我们可以将数据读取前台,通过JS获取这些相应的ID值,然后传给服务端控件,这样我们就可以轻松的实现分页了。 
      
    基本上这算得上是最简单的分页了同时也是效率最高的,因为还有一些SQL语句,比如
    select top @PageSize * from (select top @DataCount * from AdminTB order by ID ASC)a order by ID DESC;");原理:
    假设有30条数据:
    1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30现在我们要取中间的10条数据,则SQL语句要这样写
    select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by ID DESC;");
    实际上的效果如下
    (1,2,3,4,5,6,7,8,9,[ 10,11,12,13,14,15,16,17,18,19,20 ]),21,22,23,24,25,26,27,28,29,30select top 20 * from AdminTB order by ID ASC是取得 () 部分数据
    select top 10 * from (select top 20 * from AdminTB order by ID ASC) order by DESC;取得是 [] 部分。这下明白了吧不过遗憾的是这种分页是效率最低的,因为 @DataCount 会随着你的数据增加而增大,所以我们提倡用第一种,也就是我上面讲的。
      

  11.   

    [email protected]
    谢谢楼主分享!!
      

  12.   

    LZ我也要一份来学习!麻烦了!
    [email protected]
      

  13.   

    楼主我也想要一份做参考,我想要的是:access数据库的,我有sql的。谢谢!
      Email:  [email protected]
      

  14.   

    既然来了麻烦LZ也给一份吧[email protected]
      

  15.   

    [email protected]    谢谢了
      

  16.   

    多謝了
    學習中
    [email protected]
      

  17.   

    请给我也发一份吧 ....
    谢谢 .... 我一直看好你哦 .....
     
    [email protected]
      

  18.   

    yumanqing(笨鸟)
    的方案不错,既简单又高效。
      

  19.   

    我也想要一分看看,谢谢楼主了!
    [email protected]
      

  20.   

    楼主真是厚道啊~一定要给我来一份啊
    [email protected]
      

  21.   

    最近正在研究分页,麻烦楼主了,谢谢楼主了
    [email protected]
      

  22.   

    楼主 也发我一份吧!辛苦了!谢谢!  [email protected]
      

  23.   

    谢谢楼主
    [email protected]
      

  24.   

    顶~~~~~~~~~~··
    谢谢楼主,请给我一份
    [email protected]
      

  25.   

    LZ给我发一份吧,谢谢了
    [email protected]
      

  26.   

    顶~~~~~~~~~~··
    谢谢楼主,请给我一份
    [email protected]
      

  27.   

    以前sql2000用存储过程分页,
    现在sql2005用ROW_NUMBER()分页,非常的方便,直接取行号个人建议还是不要用那些控件分页好,
    毕竟一次把海量的数据读到内存中然后去找,还不如每次去数据库中取一部份最好我也要一份来看看,毕竟有20多种
    [email protected]
      

  28.   

    谢谢楼主,请给我一份
    [email protected]
      

  29.   

    谢谢楼主,请给我一份,你真是好人啦
    [email protected]
      

  30.   

    谢谢楼主 ,请给我一份~
    [email protected]
      

  31.   

    以前用分页存储过程,觉得速度还可以,看了楼主的说法,才想到要研究一下这个.
    也给我发一份吧.我学习一下[email protected]
      

  32.   

    谢谢楼主
    [email protected]
      

  33.   

    用GridView,DataList之类的控件可以很方便的分页,但效率比较低,造成大量的数据冗余. 如果数据量在几万左右的问题不大.
    如果是千万级的数据分页,用GridView等控件自带的方法去实现,就会发现速度明显的慢. 所以千万级的数据分页很多时候会用SQL查询语句的办法实现(yumanqing(笨鸟)在上面提到了);  但本人认为这种办法也有它的缺陷, 每分一次页就重新到数据库查询一次数据, 这样数据库的负荷会会加大.
    我觉得应该实现千万级数据分页的时候,应该是每次查询出10页的内容,然后把数据放到DataSet里面,然后绑定到控件.  因为DataSet有缓存的数据副本,不必经常到数据库中取数据,而且10页的数据读取速度很快,也不会造成太多的数据冗余.还有1个更优的解决方案,一般是要结合整个项目的几个层来实现的. 
    先把定义数据实体(例如一个新闻NewsInfo类,NewsInfo里面有新闻的各个属性Title,Content,Author,.......)
    然后通过IDataReader(因为DataSet比DataReader对1个数据副本,所以最好选用DataReader)把需要的数据读取出来,也是按照10页的数量来读取. 然后把IDataReader的数据写到<IList>NewsInfo中, 还要把<IList>NewsInfo放在客户端缓存里面.
    这时,可以把<IList>NewsInfo绑定到控件了,在绑定的时候先判断缓存里面是否有符合的数据,没有的才到数据库读取,然后把数据更新到缓存里面.这是我的个人看法,有什么不当的欢迎高手们指点指点!
      

  34.   

    搂主也发我一份,[email protected]
      

  35.   

    我也要  学习一下 [email protected]
      

  36.   

    我也要  [email protected] 谢谢
      

  37.   

    给我一份
    [email protected]谢了啊
      

  38.   

    谢LZ    [email protected]
      

  39.   

    先接一份:[email protected]
    ------------------------------------------
    小数据量的分页没什么多于的考虑,
    对于海量数据分页,考虑的应该是数据端的优化,程序这块估计再怎么优化也是显示的问题.
    所以,对于海量数据的优化,更多的应该考虑,数据库是不是该用到甲骨文,或者Db2了.
    Sql server 已经无法满足需求了.
      

  40.   

    也给我发一份!谢谢了!
    Email:[email protected]
      

  41.   

    谢谢楼主,我也要一份
    [email protected]
      

  42.   

    LZ也给我一份.
    [email protected]
      

  43.   

    也给我发一份!谢谢楼主了!
    [email protected]
      

  44.   

    给我也发一份吧 谢谢楼主! 嘿嘿。。
    [email protected]
      

  45.   

    我也要给我一份。谢谢楼主~~~~~
    [email protected]
      

  46.   

    我要一份,谢谢楼主[email protected]
      

  47.   

    谢谢楼主,我也要一份
    [email protected]
      

  48.   

    渴望学习
    [email protected]
    谢谢搂主了
      

  49.   

    感觉前三个问题没有什么区别,大量的数据分页最好的办法就是在数据层只返回当前页的数据而不是所有数据,所以这和用什么控件没有关系,而是和数据访问层中获取数据的方法有关。
    至于DataList显示1 2 3 4 5 6 ..这样的分页效果,可以用我写的免费分页控件 AspNetPager 来实现,有示例和源代码下载: http://www.webdiyer.com
      

  50.   

    学习
    [email protected]
    请发一份,谢谢楼主~~
      

  51.   

    谢谢楼主,请给我发一份
    email:
    [email protected]
      

  52.   

    to楼主:JS+DOM+XML+数据库设如果数据量庞大,XML就会很大,下载到客户端速度一样会很慢,虽然你的分液速度很快
      

  53.   

    谢谢楼主,请给我发一份
    email:
    [email protected]
      

  54.   

    这个问题很典型。可从下面几个方法解决:
    1.在数据库分页,用存储过程里面实现,读取当前视图显示所需要的数据,看参考webdiyer同志那样用的存储过程,就是定义临时自增列,达到能让数据集有“行记号”的功能而实现检索某些行集;
    2.数据库表的优化,例如索引;另外,我认为最重要的一点是容许对表的结构做一些冗余数据.意思一些数据可提前算好了(例如帖子的最后回复人和时间,可考虑在帖子主题里面加个最后回复人字段和时间,不用sql每次都算这个值);
    3.cache是使用,例如ms给的cache默认和EnterpriseLibrary里面的cache模块,开源的内存式memcached等等都是好的东西;数据库的IO很昂贵,而且读数据的机会比更新,删除多,缓和数据库的交互很重要。
    4.好的硬件(web更多是需要更强的cpu,缓存需要更多的内存)和带宽。。
      

  55.   

    希望楼主发一份给我学习学习,谢谢!
    邮箱地址:
    [email protected]
      

  56.   

    不知道还来得及吗?[email protected]
      

  57.   

    [email protected] 我现在刚开始学,,,
      

  58.   

    [email protected]
    谢谢楼主共享技术。
      

  59.   

    [email protected]谢谢楼主共享技术。
      

  60.   

    也给我发一份!谢谢了!
    [email protected]
      

  61.   

    也给我发一份吧!Thanks!
    Email:[email protected]
      

  62.   

    学习学习   来一份   
    [email protected]