`
ljl_xyf
  • 浏览: 630430 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

全文索引sphinx+mysql

阅读更多

基于Sphinx+MySQL全文检索架构设计


  前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。

  在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、RedHat AS4 Linux操作系统、MySQL 5.1.26、MyISAM存储引擎、key_buffer=1024M环境下实测,单表1000万条记录的数据量(这张MySQL表拥有int、 datetime、varchar、text等类型的10多个字段,只有主键,无其它索引),用主键(PRIMARY KEY)作为WHERE条件进行SQL查询,速度非常之快,只耗费0.01秒。

  出自俄罗斯的开源全文搜索引擎软件Sphinx, 单一索引最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需 3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。

  基于以上几点,我设计出了这套搜索引擎架构。在生产环境运行了一周,效果非常不错。有时间我会专为配合Sphinx搜索引擎,开发一个逻辑简单、速度 快、占用内存低、非表锁的MySQL存储引擎插件,用来代替MyISAM引擎,以解决MyISAM存储引擎在频繁更新操作时的锁表延迟问题。另外,分布式 搜索技术上已无任何问题。

 



  一、搜索引擎架构设计:
  1、搜索引擎架构图:
  

 

  2、搜索引擎架构设计思路:
  (1)、调用方式最简化:
  尽量方便前端Web工程师,只需要一条简单的SQL语句“SELECT ... FROM myisam_table JOIN sphinx_table ON (sphinx_table.sphinx_id=myisam_table.id) WHERE query='...';”即可实现高效搜索。

  (2)、创建索引、查询速度快:
  ①、Sphinx Search 是由俄罗斯人Andrew Aksyonoff 开发的高性能全文搜索软件包,在GPL与商业协议双许可协议下发行。
  Sphinx的特征:
  •Sphinx支持高速建立索引(可达10MB/秒,而Lucene建立索引的速度是1.8MB/秒)
  •高性能搜索(在2-4 GB的文本上搜索,平均0.1秒内获得结果)
  •高扩展性(实测最高可对100GB的文本建立索引,单一索引可包含1亿条记录)
  •支持分布式检索
  •支持基于短语和基于统计的复合结果排序机制
  •支持任意数量的文件字段(数值属性或全文检索属性)
  •支持不同的搜索模式(“完全匹配”,“短语匹配”和“任一匹配”)
  •支持作为Mysql的存储引擎

  ②、通过国外《High Performance MySQL》专家组的测试可以看出,根据主键进行查询的类似“SELECT ... FROM ... WHERE id = ...”的SQL语句(其中id为PRIMARY KEY),每秒钟能够处理10000次以上的查询,而普通的SELECT查询每秒只能处理几十次到几百次:
  


 
  ③、Sphinx不负责文本字段的存储。假设将数据库的id、date、title、body字段,用sphinx建立搜索索引。根据关键字、时间、 类别、范围等信息查询一下sphinx,sphinx只会将查询结果的ID号等非文本信息告诉我们。要显示title、body等信息,还需要根据此ID 号去查询MySQL数据库,或者从Memcachedb等其他的存储中取得。安装SphinxSE作为MySQL的存储引擎,将MySQL与Sphinx 结合起来,是一种便捷的方法。
  创建一张Sphinx类型表,将MyISAM表的主键ID和Sphinx表的ID作一个JOIN联合查询。这样,对于MyISAM表来所,只相当于一 个WHERE id=...的主键查询,WHERE后的条件都交给Sphinx去处理,可以充分发挥两者的优势,实现高速搜索查询。

  (3)、按服务类型进行分离:
  为了保证数据的一致性,我在配置Sphinx读取索引源的MySQL数据库时,进行了锁表。Sphinx读取索引源的过程会耗费一 定时间,由于MyISAM存储引擎的读锁和写锁是互斥的,为了避免写操作被长时间阻塞,导致数据库同步落后跟不上,我将提供“搜索查询服务”的和提供“索 引源服务”的MySQL数据库进行了分开。监听3306端口的MySQL提供“搜索查询服务”,监听3406端口的MySQL提供“索引源服务”。

  (4)、“主索引+增量索引”更新方式:
  一般网站的特征:信息发布较为频繁;刚发布完的信息被编辑、修改的可能性大;两天以前的老帖变动性较小。
  基于这个特征,我设计了Sphinx主索引和增量索引。对于前天17:00之前的记录建立主索引,每天凌晨自动重建一次主索引;对于前天17:00之后到当前最新的记录,间隔3分钟自动重建一次增量索引。

  (5)、“Ext3文件系统+tmpfs内存文件系统”相结合:
  为了避免每3分钟重建增量索引导致磁盘IO较重,从而引起系统负载上升,我将主索引文件创建在磁盘,增量索引文件创建在tmpfs 内存文件系统“/dev/shm/”内。“/dev/shm/”内的文件全部驻留在内存中,读写速度非常快。但是,重启服务器会导致“/dev/shm /”内的文件丢失,针对这个问题,我会在服务器开机时自动创建“/dev/shm/”内目录结构和Sphinx增量索引。

  (6)、中文分词词库:
  我根据“自整理的中文分词库”+“搜狗拼音输入法细胞词库”+“LibMMSeg高频字库”+... 综合整理成一份中文分词词库,出于某些考虑暂不提供。你可以使用LibMMSeg自带的中文分词词库。
 

 

  • 大小: 38.2 KB
  • 大小: 5.2 KB
分享到:
评论

相关推荐

    sphinx+mysql 安装手册

    在Sphinx中,MySQL主要作为数据源,提供原始数据供Sphinx建立索引。 ### 三、Sphinx的安装 1. **操作系统准备**:确保系统已安装必要的依赖,如GCC编译器、Boost库等。 2. **下载Sphinx**:从Sphinx官网获取最新...

    搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构

    概述:本资源旨在介绍搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的过程,涵盖了Sphinx的基本概念、特性、安装和配置 MySQL+SphinxSE存储引擎、mmseg中文分词搜索引擎架构的搭建过程。 一、Sphinx...

    基于Sphinx+MySQL的千万级数据全文检索

    【基于Sphinx+MySQL的千万级数据全文检索】的架构设计着重解决大数据量下的高效全文检索问题。Sphinx是一款源自俄罗斯的开源全文搜索引擎,它在处理海量数据时表现出极高的性能和可扩展性。在DELL PowerEdge 6850...

    基于Sphinx+MySql+Python的站内搜索引擎的设计与实现.zip

    本项目“基于Sphinx+MySql+Python的站内搜索引擎的设计与实现”正是以此为目标,结合了Sphinx全文搜索引擎、MySQL数据库以及Python编程语言,构建了一个强大的站内搜索解决方案。 首先,Sphinx是一个高性能、开源的...

    基于Sphinx+MySql+Python的站内搜索引擎的设计与实现.pdf

    综上所述,本文讨论了如何利用Sphinx作为全文搜索引擎核心,结合MySQL数据库和Python编程,为基于Linux+Apache的网站架构设计并实现一个高性能的站内搜索引擎。文章中提到的技术点不仅涉及到了搜索引擎的构建原理,...

    php+mysql+sphinx实现近实时索引

    "php+mysql+sphinx"的组合是实现近实时索引的一种常见方案,尤其适用于内容丰富的网站和应用。下面我们将详细探讨这三个组件如何协同工作以实现这一目标。 首先,PHP是一种广泛使用的服务器端脚本语言,尤其适合...

    Sphinx+MySQL_jgsj

    出自俄罗斯的开源全文搜索引擎软件Sphinx,单一索引 最大可包含1亿条记录,在1千万条记录情况下的查询速度为0.x秒(毫秒级)。Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟, 创建1000万条记录的索引...

    sql全文索引 sphinx

    Sphinx是一个高性能、开源的全文搜索引擎,它为SQL数据库提供了强大的全文索引功能。Sphinx与SQL结合使用,可以显著提升大数据量下的检索效率,尤其适用于需要高效搜索的Web应用和信息检索系统。 1. **Sphinx简介**...

    sphinx+php检索引擎

    7. **MySQL插件式存储引擎**:可以直接从MySQL内部进行全文检索。 8. **查询类型多样**:支持布尔查询、短语查询和近义词查询等多种查询方式。 9. **多全文检索域**:每个文档最多可以设置32个全文检索域。 10. **多...

    Sphinx+Python+Oracle构建全文检索系统.zip

    1. Sphinx:Sphinx是一个开源的全文搜索引擎,它允许开发者创建高性能、可配置的全文索引,并提供快速的搜索功能。Sphinx支持多种数据源,包括MySQL、PostgreSQL等,同时也支持实时索引和分布式搜索。在本项目中,...

    用Sphinx搭建MySQL中文全文搜索

    安装SphinxSE后,我们可以在MySQL中像操作普通表一样使用Sphinx的全文索引,这极大地方便了数据库查询和管理。 在搭建Sphinx的过程中,我们需要做以下步骤: 1. **安装Sphinx**: 根据操作系统下载并安装Sphinx软件...

    PHP+Mysql+Sphinx高效的站内搜索引擎搭建详释.docx

    ### PHP+Mysql+Sphinx 高效的站内搜索引擎搭建详解 #### 一、引言 随着互联网技术的发展,网站内容越来越丰富,如何快速高效地为用户提供搜索服务成为了一个重要的问题。本文旨在介绍如何利用PHP、MySQL以及Sphinx...

    sphinx+coreseek安装配置

    Sphinx和CoreSeek是两种强大的全文搜索引擎技术,尤其在处理大量数据的检索和高效率搜索时表现卓越。它们常被用于网站、数据库和其他需要快速、精确搜索功能的应用中。本文将详细介绍如何在Linux环境中安装和配置...

    Linux下php+sphinx实例

    在Linux环境中,构建一个基于PHP和Sphinx的...这个实例展示了如何从MySQL数据库获取数据,构建Sphinx索引,并在PHP中执行查询。记住,实践是最好的老师,通过不断的调试和优化,你可以实现更复杂、更高效的搜索功能。

    Sphinx搜索引擎架构与使用文档(和MySQL结合)V1.1.

    二、MYSQL+SPHINX+SPHINXSE安装步骤: 5 1、安装python支持 5 2、编译安装LibMMSeg 5 3、编译安装MySQL 5.1.26-rc、Sphinx、SphinxSE存储引擎 5 4、创建Sphinx索引文件和MySQL数据文件存放目录 6 5、创建MySQL配置...

    ha_sphinx for mysql5.5.29

    这个标题"ha_sphinx for mysql5.5.29"指的是专门为MySQL 5.5.29版本设计和优化的Sphinx全文搜索引擎插件。Sphinx是一款高性能、可扩展的全文检索引擎,常用于为大型数据集提供快速的全文搜索功能。 SphinxSE...

Global site tag (gtag.js) - Google Analytics