- 浏览: 1272790 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (608)
- 数据结构 (2)
- AJAX (3)
- 设计模式 (3)
- java (117)
- js (14)
- css (9)
- jsp (10)
- 杂文 (49)
- htmlparser (6)
- 数据库 (29)
- 算法 (14)
- 数据挖掘 (11)
- 电脑杂症 (12)
- 网络爬虫 (7)
- 应用服务器 (9)
- PHP (2)
- C# (14)
- 测试 (3)
- WEB高性能开发 (3)
- swt (1)
- 搜索引擎 (16)
- HttpClient (4)
- Lite (1)
- EXT (1)
- python (1)
- lucene (4)
- sphinx (9)
- Xapian (0)
- linux (44)
- 问题归类 (1)
- Android (6)
- ubuntu (7)
- SEO (18)
- 数学 (0)
- 农业资讯 (12)
- 游戏 (3)
- nginx (1)
- TeamViewer (1)
- swing (1)
- Web前 端 (1)
- 主页 (0)
- 阿萨德发首发身份 (0)
- 软件设计师 (0)
- hibernate (5)
- spring3.0 (5)
- elastic (1)
- SSH (3)
- ff (0)
- oracle 10g (9)
- 神经网络 (1)
- struts2.0 (2)
- maven (1)
- nexus (1)
- 辅助工具 (3)
- Shiro (1)
- 联通项目 (0)
- 2014年专业选择 (0)
- freemarker (1)
- struts1.2 (8)
- adfasdfasfasf (0)
- TortoiseSVN (1)
- jstl (1)
- jquery (1)
- eclipse plugin (0)
- 游戏外挂 (1)
- 推广 (0)
- 按键精灵 (1)
- ibatis3.0 (1)
最新评论
-
水野哲也:
不不不, 这个您真错了!其实是你引用的那个jsp和本身的jsp ...
解析关于jsp页面指令冲突问题contentType="text/html;charset=UTF-8" -
caobo_cb:
import xx.cn.weibo.Util;
[ java版]新浪微博之ruquest_token篇 -
caobo_cb:
你好 Util包没有
[ java版]新浪微博之ruquest_token篇 -
小桔子:
你好!我遇到个问题 max_allowed_packet值总是 ...
mysql查询占用内存,优化的技巧 -
donghustone:
谢谢大神!
用JSmooth制作java jar文件的可执行exe文件教程(图文)
原文:http://blog.s135.com/read.php/360.htm
前言:
本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。
在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自带的中文分词词库。
二、MySQL+Sphinx+SphinxSE安装步骤:
1、安装python支持(以下针对CentOS系统,其他Linux系统请使用相应的方法安装)
yum install -y python python-devel
2、编译安装LibMMSeg(LibMMSeg是为Sphinx全文搜索引擎设计的中文分词软件包,其在GPL协议下发行的中文分词法,采用Chih-Hao Tsai的MMSEG算法。LibMMSeg在本文中用来生成中文分词词库。)
以下压缩包“sphinx-0.9.8-rc2-chinese.zip”中包含mmseg-0.7.3.tar.gz、sphinx-0.9.8-rc2.tar.gz以及中文分词补丁。
unzip sphinx-0.9.8-rc2-chinese.zip
tar zxvf mmseg-0.7.3.tar.gz
cd mmseg-0.7.3/
./configure
make
make install
cd ../
3、编译安装MySQL 5.1.26-rc、Sphinx、SphinxSE存储引擎
wget http://dev.mysql.com/get/Downloads/MySQL-5.1/mysql-5.1.26-rc.tar.gz/from/http://mirror.x10.com/mirror/mysql/
tar zxvf mysql-5.1.26-rc.tar.gz
tar zxvf sphinx-0.9.8-rc2.tar.gz
cd sphinx-0.9.8-rc2/
patch -p1 < ../sphinx-0.98rc2.zhcn-support.patch
patch -p1 < ../fix-crash-in-excerpts.patch
cp -rf mysqlse ../mysql-5.1.26-rc/storage/sphinx
cd ../
cd mysql-5.1.26-rc/
sh BUILD/autorun.sh
./configure --with-plugins=sphinx --prefix=/usr/local/mysql-search/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile
make && make install
cd ../
cd sphinx-0.9.8-rc2/
CPPFLAGS=-I/usr/include/python2.4
LDFLAGS=-lpython2.4
./configure --prefix=/usr/local/sphinx --with-mysql=/usr/local/mysql-search
make
make install
cd ../
mv /usr/local/sphinx/etc/sphinx.conf /usr/local/sphinx/
etc/sphinx.conf.old
第二章第3节之后的正文内容不予公布,全文的目录如下(共24页):
发表评论
-
如何提高和优化Lucene索引速度
2009-07-09 12:39 1692这篇文章主要介绍了如何提高Lucene的索引速度。介绍的大部分 ... -
如何提高和优化Lucene搜索速度
2009-07-09 12:37 1532这篇文章主要介绍了如何提高Lucene的搜索速度。介绍的大部分 ... -
用 Lucene 加速 Web 搜索应用程序的开发
2009-06-25 13:56 793Lucene 是基于 Java 的全文信息检索包,它目前是 A ... -
lucene并行建索引解决方案
2009-06-23 20:20 1387写,线程2往build_index2,。。。依次类推,最后一个 ... -
文本分类入门(十一)特征选择方法之信息增益
2009-04-14 18:12 1866前文提到过,除了开方 ... -
文本分类入门(十)特征选择算法之开方检验
2009-04-14 18:10 2354前文提到过,除了分类算法以外,为分类文本作处理的特征提取算法也 ... -
文本分类入门(八)中英文文本分类的异同
2009-04-14 18:09 1544从文本分类系统的处理流程来看,无论待分类的文本是中文还是英文, ... -
文本分类入门(七)相关概念总结
2009-04-14 18:09 1345学习方法:使用样例( ... -
文本分类入门(六)训练Part 3
2009-04-14 18:08 2322SVM算法 支持向量机(Support Vector M ... -
文本分类入门(五)训练Part 2
2009-04-14 18:06 1744将样本数据成功转化为向量表示之后,计算机才算开始真正意义上的“ ... -
文本分类入门(四)训练Part 1
2009-04-14 18:05 1925训练,顾名思义,就是t ... -
文本分类入门(三)统计学习方法
2009-04-14 18:04 1607前文说到使用统计学习方法进行文本分类就是让计算机自己来观察由人 ... -
文本分类入门(二)文本分类的方法
2009-04-14 18:04 1529文本分类问题与其它分 ... -
文本分类入门(一)文本分类问题的定义
2009-04-14 18:03 1654一个文本(以下基本不区分“文本”和“文档”两个词的含义)分类问 ... -
基于关键词表达式模型的文本自动分类系统的研究与实现
2009-04-14 17:26 2185基于关键词表达式模型的文本自动分类系统的研究与实现 Rese ...
相关推荐
【基于Sphinx+MySQL的千万级数据全文检索】的架构设计着重解决大数据量下...总体而言,这种基于Sphinx+MySQL的全文检索架构能够在不影响数据一致性的前提下,提供高性能的搜索体验,尤其适用于处理大量数据的业务场景。
综上所述,本文讨论了如何利用Sphinx作为全文搜索引擎核心,结合MySQL数据库和Python编程,为基于Linux+Apache的网站架构设计并实现一个高性能的站内搜索引擎。文章中提到的技术点不仅涉及到了搜索引擎的构建原理,...
搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构 概述:本资源旨在介绍搭建Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词搜索引擎架构的过程,涵盖了Sphinx的基本概念、特性、安装和配置 MySQL+SphinxSE存储...
前言:本文阐述的是一款经过生产环境检验的千万级数据全文检索(搜索引擎)架构。本文只列出前几章的内容节选,不提供全文内容。 在DELL PowerEdge 6850服务器(四颗64 位Inter Xeon MP 7110N处理器 / 8GB内存)、...
曾经在七月,写过一篇文章──《基于Sphinx+MySQL的千万级数据全文检索(搜索引擎)架构设计》,前公司的分类信息搜索基于此架构,效果明显,甚至将很大一部分带Where条件的MySQL SQL查询,都改用了Sphinx+MySQL搜索...
1、搜索引擎架构图(基于PHP+MySQL+Sphinx): 3 2、搜索引擎架构设计思路: 3 ⑴、调用方式最简化: 3 ⑵、创建索引、查询速度快: 3 ⑶、按服务类型进行分离: 4 ⑷、“主索引+增量索引”更新方式: 4 ⑸、“Ext3...
Sphinx搜索引擎架构与使用文档(和MySQL结合)
Sphinx是一个高性能、开源的全文检索引擎,专为配合SQL数据库而设计,如MySQL和PostgreSQL,用于实现高效且专业的全文搜索功能。它的核心优势在于能够提供比数据库原生搜索更强大的搜索性能,并且易于集成到各种使用...
本文档将详细介绍Sphinx的架构设计以及与MySQL的集成使用方法。 一、XX网搜索引擎架构设计 1. 搜索引擎架构图(基于PHP+MySQL+Sphinx) 在XX网的架构中,Sphinx作为核心的全文检索引擎,与PHP后端和MySQL数据库...
标题中的“基于PHP的Sphinx全文检索引擎php版forWindows源码.zip”表明这是一个用于Windows操作系统的PHP版本的Sphinx全文检索引擎的源代码包。Sphinx是一个高性能、可扩展的全文搜索引擎,常用于Web应用中,以提供...
它最初由Andrew Aksyonoff设计并开发,旨在解决MySQL数据库在处理大量文本数据时全文检索效率低下的问题。通过与MySQL集成,Sphinx能够在不改变原有应用架构的情况下大幅提升搜索性能。 #### 二、为什么选择Sphinx...
Sphinx是一个高性能、全文检索引擎,常用于构建高效的信息检索系统。它主要设计为与关系型数据库如MySQL结合,提供快速、精准的搜索功能。在本文档中,我们将深入探讨Sphinx的架构设计以及如何与MySQL配合使用。 一...
Sphinx 是一个高性能全文搜索引擎,常用于互联网应用中,它能提供快速的全文检索功能,并且可以与数据库如 MySQL 结合使用。以下是关于 Sphinx 搜索引擎的架构与使用的一些关键知识点: 1. **搜索引擎架构设计**: ...
斯芬克斯(Sphinx)是一款高性能的全文搜索引擎,专为高速、精确的全文检索而设计。在本项目中,Sphinx结合了MySQL数据库、SWSC(Smart Chinese Segmentation Component,智能中文分词组件)和PHP编程语言,构建了一...
**定义**:Sphinx是一款开源全文搜索引擎工具,可以集成到MySQL数据库中使用。 - **核心优势**: - 高效索引建立:支持批量文档导入与实时增量更新。 - 强大搜索能力:具备模糊匹配、近义词扩展等功能,提升查询...
数据库搜索引擎Sphinx是一款高效、可定制且功能丰富的全文搜索引擎,主要设计用于Web应用,以便快速地从大量数据中检索相关信息。Sphinx的核心特性包括实时索引、近实时搜索以及高度可扩展性,使得它在处理大数据量...
贴心猫(ImCat) 是以PHP+MySQL架构设计的通用网站系统,简约、轻量、实用、免费、共享。适用于:网店,医院,学校,企业站,个人网站,企业内部Intranet,中小型行业门户站点等……功能介绍:1、支持:PHP5.4~PHP7.3/...