首页 新闻 赞助 找找看

一亿条数据查询解决方案

0
悬赏园豆:80 [已解决问题] 解决于 2012-02-01 16:33

数据库有上亿条商品数据

需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)

我最本来是这样设想的:

建立一个商品名称索引表:ID,Name,ProductID 三个字段

ID自增

Name(分词程序对商品名称进行分词后,保存下来的一个词),

ProductID,商品名称包含该词的商品ID(varchar(max)字段,任何包含该词的商品ID都存在这个字段

问题就是到了这里,比如一个词:黑色,可能包含黑色这个词的商品名称有N多个,就算我知道了这些商品ID处理起来也很麻烦了。

还有在网上看到很多资料,说这么大数据量要进行数据分区,但如果搜索名称字段的话,我必须要进行全表扫描才能得到想要的数据啊?

请大家帮我分析下,我该怎么处理啊?

East神奇的主页 East神奇 | 初学一级 | 园豆:21
提问于:2011-03-16 19:15
< >
分享
最佳答案
0

把关键词单独一个表出来 然后与产品表关联 查询时 直接 等号 查询 速度肯定快

如果遇到库里没有的关键词就记录下,不过这第一次慢些 之后就ok了

收获园豆:65
慧☆星 | 大侠五级 |园豆:5640 | 2011-03-24 15:11
我是按这种方法做的,我上面也说明了,如果一个关键字:黑色,可能有上十万条数据包含黑色这个关键字,怎么处理呢?
East神奇 | 园豆:21 (初学一级) | 2011-03-24 15:14
另建一个关系表 一个产品主键ID和关键词主键ID 多对多 关系建立
慧☆星 | 园豆:5640 (大侠五级) | 2011-03-24 15:19
谢谢你,貌似这样也行的通了啊,我再仔细想一下啊!!
East神奇 | 园豆:21 (初学一级) | 2011-03-24 16:10
其他回答(11)
0

这个可能要参考下全文搜索技术了。

收获园豆:3
On- The-Way | 园豆:238 (菜鸟二级) | 2011-03-16 21:36
0

还要分区,以及并行计算的数据库支持

收获园豆:3
surfsky | 园豆:210 (菜鸟二级) | 2011-03-16 23:02
0

分表、分区、分库、分xxx,尽可能的分,就OK啦

收获园豆:3
大石头 | 园豆:110 (初学一级) | 2011-03-17 08:54
0

能不能直接给money,我给你解决哈

收获园豆:3
Mr.Longer | 园豆:208 (菜鸟二级) | 2011-03-17 09:13
0

这个你可以把用户搜索的词语做统计,然后常用到的关键词缓存出来,用户下一次搜索的时候就直接从缓存里面输出来,这个应该是最基本的了。对其他的数据也可以按关键词做分库/区存储做全文索引,用空间换时间的方法加快查询结果,这个要看具体情况和硬件支持了。传说中64位的server2008可以支持TB级的内存,有条件也可以从这个方面研究下,关键是要实际操作,只有不断尝试你才能找到适合你的方法,别人说的东西都只是个参考。

附上server2008 r2的相关技术参数说明,只找到台湾版的:
http://www.microsoft.com/taiwan/windowsserver2008/prodinfo/compare-specs.aspx

收获园豆:3
蒋正 | 园豆:264 (菜鸟二级) | 2011-03-17 11:14
0

先可以按时间分区 毕竟那么多数据 用户想要的不会有多少 然后可以按最近一个月多这限定时间段来搜索给用户反馈,并增加时间段查询区间功能。 全文检索 或者 lucene

码尔代夫iimax | 园豆:3138 (老鸟四级) | 2011-03-17 12:00
0

1、首先业务上如果确实是那么多条记录的话,用分区,索引应该可以解决;

2、如果商品时可以分类的的,就要从业务上处理一下,分类检索;

winzheng | 园豆:8797 (大侠五级) | 2011-03-17 13:16
0

建议对大表进行水平分割,如果这个表又是增修改等,再在查的话,速度很慢的。

      所以可再建一个库,让这两个库的数据同步(订阅/发布),查询时专用一个库,修改时专用一个库。

     对于大数据量,你在一个库上查询,要是建立索引等,对更新的速度也会大大的影响的。

  当前硬件也是很重要的。

.NET快速开发框架 | 园豆:946 (小虾三级) | 2011-03-17 17:16
-1

分区是要的,使用ajax缓存关键字,然后再用分区来查找你要想的数据,这样就可以提高性能!

一直在跑wu | 园豆:150 (初学一级) | 2011-03-19 11:15
0

分库,分区这个是必须的,并行计算,可以参考MapReduce模型

Jack.Wang | 园豆:194 (初学一级) | 2011-03-23 18:42
0

数据仓库,了解下吧~~

致远书生 | 园豆:409 (菜鸟二级) | 2011-04-05 19:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册