首页 新闻 会员 周边

【急!】类似GOOGLE,爱词霸,如何快速查询匹配数据?

0
悬赏园豆:50 [已解决问题] 解决于 2008-07-31 09:59
<SPAN id=lbContent>一在线词典查询。如何让数据快速查询。我的思路是查询放在DATASET,然后用 DataRow[] drow = ds.Tables[0].Select(" word like '" + WordStr + "%'"); 这样匹配数据。问题1》页面loading加载几十W条数据到服务器内存里的时候,实在是太慢了。。 <BR>有什么好建议吗?</SPAN>
问题补充: 1》除了优化查询数据库方面,如建立词条索引,优化SQL之类,全文索引,缓存。 2》希望在算法,结构方面能提供些建议。 3》数据量有100W条,查询不超过1秒。 4》一文本框,一查询按钮,做成类似GOOGLE这种。这个可用AJAX,我问的不是自动完成功能。问题在于如何匹配数据的算法方面。 5》Dictionary.ContainsKey和List.BinarySearch哪个效率高 ??List.先Sort 6》如何比对词条,把临近相似的显示出来,如:“c,ca,case,cast,cat,catch”,输入“ca”的时候,把“ca,case,cast,cat,catch” 这些个词条显示出来。
李辉明的主页 李辉明 | 初学一级 | 园豆:100
提问于:2008-07-23 14:57
< >
分享
最佳答案
0
不要用DataSet了,换成一个Array,或者List来保存数据. 100w = 1M 假设一条记录占500个字节 1M * 500 Bytes per record = 500MB 这样基本有个1G以上的内存就够用的了,只是网站启动时加载慢. 如果在内存里顺序搜索仍然不够快,可以加载后排序,然后进行二分查找.
deerchao | 大侠五级 |园豆:8367 | 2008-07-23 22:38
其他回答(5)
0
可否结合一下,第一个字母匹配从数据库读取出来,放入dataset,应该比几十万的数量级小很多吧,然后在dataset中选取当用户输入第2个以及以后的字母的情况 当然,还应该在适当的地方加入缓存处理
雨哲 | 园豆:80 (初学一级) | 2008-07-23 15:04
0
楼主是想实现在文本框中输入时内容时的自动完成功能吗?请使用ASP.NET AJAX中的AutoCompleteExtender控件
麒麟.NET | 园豆:3614 (老鸟四级) | 2008-07-23 15:20
0
你可以研究一下常见的词典格式,词典文件一般没有必要用数据库吧。
玉开 | 园豆:8822 (大侠五级) | 2008-07-23 15:24
0
自动完成功能,网上很多的,Ajax是一种实现方法吧!!!
伽马科技.攻城师 | 园豆:1303 (小虾三级) | 2008-07-23 16:17
0
建议不使用DataSet一次加载全部单词的方法,这样dbs与iis通信量太大,效率上会有损失。如果不使用google suggest,则用户全部输入后,才会触发查询。此时查询,其得到结果应该是可确定的(0个或1个等),这样,dbs与iis之间的通讯很小,且查询只有一次。之前的建议,数据库查询次数都不小于1次。其实,影响速度的问题,主要在与数据库连接花费的时间,只要索引建的好(此处是不是把每个单词列建成了索引?),100万条,查询其中的一条,速度是很快的(远小于1秒)。
Ritchie(乞戈) | 园豆:230 (菜鸟二级) | 2008-07-24 10:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册