分页的技术已经很成熟了,但我一直是半瓶水,以前经常用脚本和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
另外,用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
email:
[email protected]
Email:[email protected]
email:
[email protected]
[email protected]
对于海量应该用,分页的存储过程,如果你用的是SQL2005,它有提供分页功能.
如果就几百上千条,用DATASET.FILL的分页看不大出来.
对于想建设高性能的WEB应用程序,那就要合理使用服务端控件了,控件绑定的功能越多,它耗费的资源就相对大点.如Gridview>DataList>Repeater.
太多了,说不完.
至于你说的XML+XLST显示论坛页面,这个就是CSDN版面的技术,它是在客户端解析显示的.如果你用服务端,那还不如直接用数据库呢
可以 参考http://blog.csdn.net/hertcloud/category/281167.aspx
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
楼主可以先到我的小论坛去熟悉一下分页的基本概念。(显示帖子页面,查看回复页面)
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 会随着你的数据增加而增大,所以我们提倡用第一种,也就是我上面讲的。
谢谢楼主分享!!
[email protected]
Email: [email protected]
學習中
[email protected]
谢谢 .... 我一直看好你哦 .....
[email protected]
的方案不错,既简单又高效。
[email protected]
[email protected]
[email protected]
[email protected]
谢谢楼主,请给我一份
[email protected]
[email protected]
谢谢楼主,请给我一份
[email protected]
现在sql2005用ROW_NUMBER()分页,非常的方便,直接取行号个人建议还是不要用那些控件分页好,
毕竟一次把海量的数据读到内存中然后去找,还不如每次去数据库中取一部份最好我也要一份来看看,毕竟有20多种
[email protected]
[email protected]
[email protected]
[email protected]
也给我发一份吧.我学习一下[email protected]
[email protected]
如果是千万级的数据分页,用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绑定到控件了,在绑定的时候先判断缓存里面是否有符合的数据,没有的才到数据库读取,然后把数据更新到缓存里面.这是我的个人看法,有什么不当的欢迎高手们指点指点!
[email protected]谢了啊
------------------------------------------
小数据量的分页没什么多于的考虑,
对于海量数据分页,考虑的应该是数据端的优化,程序这块估计再怎么优化也是显示的问题.
所以,对于海量数据的优化,更多的应该考虑,数据库是不是该用到甲骨文,或者Db2了.
Sql server 已经无法满足需求了.
Email:[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
谢谢搂主了
至于DataList显示1 2 3 4 5 6 ..这样的分页效果,可以用我写的免费分页控件 AspNetPager 来实现,有示例和源代码下载: http://www.webdiyer.com
[email protected]
请发一份,谢谢楼主~~
email:
[email protected]
email:
[email protected]
1.在数据库分页,用存储过程里面实现,读取当前视图显示所需要的数据,看参考webdiyer同志那样用的存储过程,就是定义临时自增列,达到能让数据集有“行记号”的功能而实现检索某些行集;
2.数据库表的优化,例如索引;另外,我认为最重要的一点是容许对表的结构做一些冗余数据.意思一些数据可提前算好了(例如帖子的最后回复人和时间,可考虑在帖子主题里面加个最后回复人字段和时间,不用sql每次都算这个值);
3.cache是使用,例如ms给的cache默认和EnterpriseLibrary里面的cache模块,开源的内存式memcached等等都是好的东西;数据库的IO很昂贵,而且读数据的机会比更新,删除多,缓和数据库的交互很重要。
4.好的硬件(web更多是需要更强的cpu,缓存需要更多的内存)和带宽。。
邮箱地址:
[email protected]
谢谢楼主共享技术。
[email protected]
Email:[email protected]
[email protected]