首页 新闻 会员 周边 捐助

asp.net大数据量生成html

0
悬赏园豆:200 [已解决问题] 解决于 2008-09-17 11:04

  10万条记录,一页20条要生成5000个html页.如果添加一条记录就要重新生成5000个html。有什么解决办法么?

  不考虑伪静态的情况,怎么办!

chear的主页 chear | 初学一级 | 园豆:68
提问于:2008-09-16 08:47
< >
分享
最佳答案
0

虽然略苟同丁大侠们的看法,但我想三德子兄弟(?)之所以这么问,肯定有它的应用场景!或许领导就是要按某既定顺序查看记录,而新插入的记录按既定顺序会出现在任何某一页。

向来“时间”与“空间”构成了计算方法上的重要矛盾,即便硬件飞速发展的今天,经不住一些变态需求的折腾。我想,如果你很在乎重先生成这“5000页”的时间(抛弃一次性全部重新生成的方案),也很在乎每次访问“某页"都重生成的时间(摒弃伪静态),那何不二者中和一下?

每次插入数据(或更新、删除等),记录当时的系统更新时戳(比如 LastUpdateTime),截取对这5000页的页面请求,每次请求对照当前请求页的更新时戳(比如LastWriteTime)与系统更新时戳,一致则重定向到页面;否则重生成当前页并更新当前页的更新时戳,然后重定向。

该解决方案的好处在于,不用每次更新全部记录,也不用每次插入、更新、删除记录时都即刻重生成所有页,而是间接的按需索取,使得5000页的更新任务不再那么频繁的调动,也不再那么盲目的调动(短时间内依次插入若干条记录,我的解决方案里是极有可能绝大多数静态页面只重生成了一遍)。

缺点是,每次访问页面增加了时戳判断,并且在“过期”时会导致重生成,延误页面返回。但时戳判断只是简单的几条语句,不会影响性能;而过期时的页重生成,是在分担5000页的重生成任务的5000分之一,考虑系统性能的整体消耗,是十分值得的(对于非分布式系统,试想在程序频繁生成5000页时,它会有多少资源反馈用户的页请求?)。

陛下 | 老鸟四级 |园豆:3938 | 2008-09-16 20:01
其他回答(4)
0

如果对实时性要求非常高的话,静态化显然不是一个好的策略

如果实时性要求不高,则可以考虑在第一次访问的时候动态生成,随后保存为静态文件,此静态文件可以用一种过期策略,比如2小时后过期,或者访问10次后过期,或者1小时没访问则过期等等

过期的静态文件会被删除,下一次访问的时候仍然动态执行,再保存为静态文件

这样就不需要每一次都读完整个数据库生成5000个HTML页,也相应地减少了数据改变导致的重新生成的消耗

Gray Zhang | 园豆:17610 (专家六级) | 2008-09-16 09:32
0

不如倒序生成HTML页面,最后剩余不到20条记录做为第一页,这样每次只生成第一页就可以,

或者

第一页设置为20-39条记录,够40条则生成新页,这样也是只生成第一页就成,

常规方法只能"错位",那所有的列表页面都要重新生成一遍,一定要这样做的话,可以放在午夜执行,

kkun | 园豆:20 (初学一级) | 2008-09-16 10:02
0

UrlReWrite+缓存其实是所有方案中的最好方案,性能也很高

1.

将页面的ID/Title生成为js

分页不动

用Ajax调用

不过十万条,一个ID8字节算一个标题20字节

30*十万=3百万约为3M

看你取舍了

2.

另,也可以加一个限制条件

分页案日期存

生成时只生成最新的一页,

最新不够20条不生成

这样最新的文章虽然达到20条才能被显示,不过性能高了不止万倍

重典 | 园豆:2442 (老鸟四级) | 2008-09-16 10:22
0

为什么要重新生成呢?记录不是在末尾增长?

如果新添加的数据总是在数据库的最后,那么可以考虑每次增加记录只重新生成最后一页,不需要全部重新生成

如果新添加的数据总是在数据库最前面,就可以每次只生成第一页

如果是随机增加记录的话就麻烦了,可以折中向两端生成,或者只向一端生成,数据量越大生成效率越低

我觉得你应该想办法解决的是让增加的记录出现在数据库末尾或开头(其实就是倒序排列的末尾),这样就可以只生成一页了

丁学 | 园豆:18730 (专家六级) | 2008-09-16 18:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册