使用Sphinx作为Mysql下的一种存储引擎
睿思数据库常年高负载运行,MySQL占用率几乎一直处于100%,站点可用率低下,通过查看processlist得出结论,like查找过于频繁。
like一定程度上充当了全文搜索的角色,随着数据库的增长,like操作消耗的cpu资源也会直线上升,根本原因在于MySQL无法高效的处理全文搜索引擎。
使用全文搜索引擎可以很好的解决这一问题,sphinx就是一款很好的开源检索引擎。
phinx 是一个基于 GPL 2 协议颁发的免费开源的全文搜索引擎.它是专门为更好的整合脚本语言和SQL数据库而设计的.当前内置的数据源支持直接从连接到的 MySQL 或 PostgreSQL 获取数据, 或者你可以使用 XML 通道结构(XML pipe mechanism , 一种基于 Sphinx 可识别的特殊xml格式的索引通道) Sphinx 全文索引的主要特性: 1. 高速建立索引 (在使用主流CPU的情况下 , 可达10M/秒) 2. 高速查询 (在 2-4 GB 的文本里查询平均耗时在 0.1 秒以内) 3. 高扩展性 (单CPU支持高达100G的数据文本,1亿条记录) 4. 支持分布式检索 (0.9.6版起) 5. 原生支持Mysql (MyISAM 和 InnoDB 表都被支持) 6. 支持表达式查询 7. 支持相近词组排名,提供良好的相关查询 8. 支持英文,俄文词干提取和音标查询 9. 支持任意数量的文档字段 (可以查询时修改权重) 10.支持文档组 11.支持分词 12.支持不同的查询模式 13.通用的XML接口,大大简化了集成定制 14.纯PHP客户端API(无需编译扩展)
为了更好的适用于中文,国人基于sphinx开发出了中文检索引擎Coreseekhttp://www.coreseek.com。
通过一定的设置和应用源码的改动,sphinx可以很好的代替mysql中的like查找,实现全文搜索。
国内这方面的文档和资料较少,部署有一定难度,在接下来几天,我会针对睿思的实际环境,将sphinx的部署过程记录下来。