数据库有上亿条商品数据
需要处理大量按商品名称的模糊查询(假设商品名称的分词已经实现了,也就是用多个关键字来查询)
我最本来是这样设想的:
建立一个商品名称索引表:ID,Name,ProductID 三个字段
ID自增
Name(分词程序对商品名称进行分词后,保存下来的一个词),
ProductID,商品名称包含该词的商品ID(varchar(max)字段,任何包含该词的商品ID都存在这个字段
问题就是到了这里,比如一个词:黑色,可能包含黑色这个词的商品名称有N多个,就算我知道了这些商品ID处理起来也很麻烦了。
还有在网上看到很多资料,说这么大数据量要进行数据分区,但如果搜索名称字段的话,我必须要进行全表扫描才能得到想要的数据啊?
请大家帮我分析下,我该怎么处理啊?
把关键词单独一个表出来 然后与产品表关联 查询时 直接 等号 查询 速度肯定快
如果遇到库里没有的关键词就记录下,不过这第一次慢些 之后就ok了
这个可能要参考下全文搜索技术了。
还要分区,以及并行计算的数据库支持
分表、分区、分库、分xxx,尽可能的分,就OK啦
能不能直接给money,我给你解决哈
这个你可以把用户搜索的词语做统计,然后常用到的关键词缓存出来,用户下一次搜索的时候就直接从缓存里面输出来,这个应该是最基本的了。对其他的数据也可以按关键词做分库/区存储做全文索引,用空间换时间的方法加快查询结果,这个要看具体情况和硬件支持了。传说中64位的server2008可以支持TB级的内存,有条件也可以从这个方面研究下,关键是要实际操作,只有不断尝试你才能找到适合你的方法,别人说的东西都只是个参考。
附上server2008 r2的相关技术参数说明,只找到台湾版的:
http://www.microsoft.com/taiwan/windowsserver2008/prodinfo/compare-specs.aspx
先可以按时间分区 毕竟那么多数据 用户想要的不会有多少 然后可以按最近一个月多这限定时间段来搜索给用户反馈,并增加时间段查询区间功能。 全文检索 或者 lucene
1、首先业务上如果确实是那么多条记录的话,用分区,索引应该可以解决;
2、如果商品时可以分类的的,就要从业务上处理一下,分类检索;
建议对大表进行水平分割,如果这个表又是增修改等,再在查的话,速度很慢的。
所以可再建一个库,让这两个库的数据同步(订阅/发布),查询时专用一个库,修改时专用一个库。
对于大数据量,你在一个库上查询,要是建立索引等,对更新的速度也会大大的影响的。
当前硬件也是很重要的。
分区是要的,使用ajax缓存关键字,然后再用分区来查找你要想的数据,这样就可以提高性能!
分库,分区这个是必须的,并行计算,可以参考MapReduce模型
数据仓库,了解下吧~~