新足迹

 找回密码
 注册

精华好帖回顾

· 2010年12月半月谈 - 我们为什么而骄傲? (2010-12-11) 老猫晒太阳 · 我享受澳洲平和的生活 (2005-2-11) samdong
· 梦游香港 —— 一个从未去过香港的人眼里的香港 (2007-9-19) powermao · 航航小厨房(52) 【~~~~~~四川叶儿耙~~~~~~】 (2011-7-30) 航迹云
Advertisement
Advertisement
查看: 1971|回复: 14

---------- 做Web的同学,如果数据库返回大量数据时,你们怎么处理? ---------- [复制链接]

发表于 2012-12-12 13:12 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整


就好比百度或者谷歌的搜索引擎,它们会告诉你总共record的数量并且显示前20个譬如。


现在是我的backend是Foxpro来访问数据库,它好像不支持paging式的query,所以如果我不用filter的话会返回几万条数据。请问有什么办法或者3rd party framework可以让返回的数据到web端时不消耗过多的资源?

谢谢!


Advertisement
Advertisement
头像被屏蔽

禁止访问

发表于 2012-12-12 13:16 |显示全部楼层
此文章由 lingg 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 lingg 所有!转贴必须注明作者、出处和本声明,并保持内容完整
如果不出意外的话,是用两次查询,一次只查单项,显示总量,一次查所有要显示的项,显示当前查询结果






我不是做数据库的,纯属YY

发表于 2012-12-12 13:31 |显示全部楼层
此文章由 yang~_~ 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 yang~_~ 所有!转贴必须注明作者、出处和本声明,并保持内容完整
将结果输出到一个临时表中,自己做分页,每次返回20条。

发表于 2012-12-12 13:45 |显示全部楼层
此文章由 gooderic1977 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 gooderic1977 所有!转贴必须注明作者、出处和本声明,并保持内容完整
OMG! Foxpro。。。似曾相识的名字

发表于 2012-12-12 13:56 |显示全部楼层
此文章由 flyspirit 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 flyspirit 所有!转贴必须注明作者、出处和本声明,并保持内容完整
二次查询比较合适, 第一次查总量, 第二次返回前n条的数据。 不足之处是到了最后几页性能也会不好。

如果你的返回数据不需要排序, 那还好些, 可以利用id, 比如返回id > 10000的前20条记录。 如果要排序的, 就只有用上面的方法了。

发表于 2012-12-12 14:14 |显示全部楼层
此文章由 梦呓人 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 梦呓人 所有!转贴必须注明作者、出处和本声明,并保持内容完整
大家和我的想法差不多,也是select count(*) from .... 和select top 20 from .... 分开。实际上我要显示的还不单单是总量,还包括不同的status那些集合的数量。


如果返回数据list不大的话我就可以用例如:

list.Count(p => p.Status == "Single")
list.Count(p => p.Status == "Married")
list.Count(p => p.Status == "Married but available")
....
来分别显示了,只要1个call back。现在问题这个list可能含大量的数据,所以即使cache的话也会对资源消耗很大



不知道高人们还有什么好的办法,除了分成几个call之外?
Advertisement
Advertisement

特殊贡献奖章

发表于 2012-12-12 14:20 |显示全部楼层
此文章由 kr2000 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 kr2000 所有!转贴必须注明作者、出处和本声明,并保持内容完整
要么cache要么分几个call,不能兼得

发表于 2012-12-12 14:22 |显示全部楼层
此文章由 IsDonIsGood 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 IsDonIsGood 所有!转贴必须注明作者、出处和本声明,并保持内容完整
最近在用solr,如果是solr的话,会直接返回查找到多少个结果和你指定返回的数据(在查询时指定)。

发表于 2012-12-12 14:43 |显示全部楼层
此文章由 stevenbian 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 stevenbian 所有!转贴必须注明作者、出处和本声明,并保持内容完整
查询结果放在backend的变量里,分页输出到页面的变量。

发表于 2012-12-12 15:15 |显示全部楼层
此文章由 无视 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 无视 所有!转贴必须注明作者、出处和本声明,并保持内容完整
if you use store proc (not sure foxpro has similar concept)

pass in store proc 2 arguments

1. page size
2. Current page number

In store proc, do sorting and pagination, return collection of result for current page.

U also might need to render proper pagination that can be done as user control.

评分

参与人数 2积分 +8 收起 理由
梦呓人 + 4 大哥,Foxpro程序员说这个预言不支持paging .
atransformer + 4 我很赞同

查看全部评分

发表于 2012-12-12 16:17 |显示全部楼层
此文章由 findcaiyzh 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 findcaiyzh 所有!转贴必须注明作者、出处和本声明,并保持内容完整
换数据库应该是一个选择吧。
Advertisement
Advertisement

发表于 2012-12-12 23:35 |显示全部楼层
此文章由 ericlgq 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 ericlgq 所有!转贴必须注明作者、出处和本声明,并保持内容完整
我当年是从foxbase开始学写程序的,看着这个名字好亲切啊,哈哈哈

发表于 2012-12-14 16:39 |显示全部楼层
此文章由 鱼羊鲜 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 鱼羊鲜 所有!转贴必须注明作者、出处和本声明,并保持内容完整
fp还活在人间啊

发表于 2012-12-14 21:49 |显示全部楼层
此文章由 HISOKA 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 HISOKA 所有!转贴必须注明作者、出处和本声明,并保持内容完整
楼主生活在哪个年代 现在还有用fp做数据库的项目阿

发表于 2012-12-19 16:12 |显示全部楼层
此文章由 Ausbear 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 Ausbear 所有!转贴必须注明作者、出处和本声明,并保持内容完整
没有group by 的function 吗?

select status, count(*) from members
group by status order by status;

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部