关于大数据量模糊查询的方法
作者:vogts | 分类: 大话技术 | 标签: 大话技术 | 日期:2008-07-21
说实话,在ITPUB上也好,CNOUG上也好,看到很多人问数据模糊查询的问题,特别是一张表的数据量在200M以后,你的查询速度越来越慢。
其实最最简单的就是 like ‘%xx%’,但是这样效率极差,纯粹在拼机器的IO了。
其实在我的日常工作中,对于模糊查询,主要使用以下几种方案提高效率:
A:全文索引
Oracle自带的,SQL SERVER,MYSQL也有这个功能。它的主要实现方式是拆字。记得“玉面飞龙”有一篇文章介绍ORACLE全文索引的,介绍的很详细。
但是全文索引也有很多不足,如:繁体字,孤僻字的支持不好;内部BUG比较多;自身维护的代价和成本很高;新来的开发搞不懂全文索引查询语法;
目前也就少数几个数据库在用全文索引了,打算在不远的将来,将全文索引拿下线了。全部使用Search实现。
B:搜索引擎
其实alibaba集团全部使用的搜索技术,叫“ISEARCH”;100%的知识产权归阿里巴巴所有。
其实在业界最有名的搜索引擎叫“Lunce”,它不仅仅支持JAVA,也支持.NET。
使用搜索最大的好处,它是可以线性扩展的,不像我们的DB。此外我介绍一下搜索引擎大致过程:
数据库有张LOG表,记录变化过的数据》》搜索引擎根据LOG表的数据,DUMP出一份BUILD数据》》把DUMP的东西分发到各个集群》》每台机器再把这个应用到索引文件》》APCHE提供WEB SERVICE给前台
大致过程就这样。至于索引文件本身是个二进制文件。
我觉得搜索引擎本身的实现机制和ORACLE的全文索引类似,也是根据分词器来分词。如果去查找也是根据一个个字Hash mapping出来的,然后根据位置先后次序,找出哪些是符合的。



看涛哥写的东西可以学习不少东西,
在开源界有三个关于搜索或Map/Reduce的顶级项目,
第一个就是您所说的Lucene,还有一个是Hadoop是一个Map\reduce的实现,本身可以用来构建大型分布式系统,好像Yahoo的集群就是使用的Hapoop,还有个就是Nutch,其实这是Lucene的一个子项目,可以利用lucene构建一个完整的搜索引擎应用。
卢克进 @ July 25, 2008 |
Lucene性能怎么样?
daniel @ August 25, 2008 |
Lucene效率不是很理想,特别是数据量比较大的时候.
vogts @ August 25, 2008 |
最近在搞一个企业黄页搜索,才100多W记录,模糊查询时用select count(*) CPU一般会达到100%
一直找不到好的解决办法,55555555
大数据量模糊查询有没有什么好一点的解决方法?
千万级的记录数,用MSSQL,一台普通服务器,能搞定吗?
daniel @ August 25, 2008 |
怎么没人顶了?
555555555
daniel @ August 29, 2008 |
mssql也有全文索引的,用mssql的全文索引先试试吧。100多W不算大的。
我记得有次给人家mssql做的项目,2W多笔记录吧,因为没加索引。结果200条记录,都需要1分多钟。
呵呵~~··
vogts @ September 1, 2008 |
对于全文检索方面来说,Lucene的性能在一些搜索引擎的开源项目中还是算比较不错的了,值得推荐,至于数据量的问题,关键看怎么设计好的结构怎么来使用了,一般几百个G的数据量来说还是不成问题的。
sky @ September 18, 2008 |