搜索引擎架构设计

HK 学习笔记

好久都没有写过博客了,自从换了公司后,一直在忙...时间就更少了,但是学到的东西却是非常多!今天我把学到的东西记下来,当做自己的一个笔记吧,也算是一个学习的心得

搜索引擎架构设计

 

介绍下我这次说的搜索引擎的主要技术

 

node.js  Sphinx  oracle  mongodb   下面简单介绍下

 

node.js   它是一个号称无阻塞的轻量级框架

主要编写语言是javascript

详细:http://nodejs.org

 

Sphinx

相信大家对它已经很熟悉了吧,是一个基于SQL的全文检索引擎 ,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索...

详细:http://sphinxsearch.com

 

oracle 数据库

mongodb

高效读写nosql,具体不多说了

详细:http://www.mongodb.org

好了,下面就是架构层面

先看看架构图

搜索引擎架构设计

好了,结构图有了我就开始说说整个图的各个部分吧

搜索引擎

1.数据源(oracle)

  我们提供的数据源当然就是oracle了

2.搜索技术(Sphinx --->>python(读写数据))

Sphinx担任建索引的框架技术

**读取数据**

图上,表明它不单止建索引,而且要从oracle读取数据,我们为什么这样做呢?由于Sphinx里包含了python,而且对oracle驱动支持也是不错的,所以我们不分专门读数据的程序了,直接调用Sphinx的python程序去读取数据,然后再到它本身的目的建立索引

**建立索引**

在建索引的过程中,我们使用了oracle的唯一标识,uuid去做索引,也是单单索引需要的数据,所以我们的索引是非常少(就是因为,以前luncene建索引的时候,把很多相关的内容都保存在索引文件中,导致索引文件过大,当用户过多的访问,就会对服务器造成负载)最后我们才选择了Sphinx

Sphinx luncene 相比,读取大索引文件的时候,Sphinx更有优势,效率更高(题处话)

**写数据**

由于我们得知mongodb的读写高效

我们下了这样的决定,Sphinx的python程序既然把数据从oracle读出来了,那么也写一份到mongodb中吧

3.客户端(node.js)

最后就是我们的客户端了

我们的node.js只向外提供服务,它本身就是一个服务器构架,而且号称无阻塞服务器功能的确非常强大

一个客户端搜索

通过url去访问node.js提供的服务,然后再去调用Sphinx索引文件去查找相关的内容,Sphinx返回结果集,node.js再去mongodb查询内容,最后返回给客户

这就是一个完整的过程(其中细节还有很多,很多,这里就不多说了)

最后,我们可能给搜索引擎加一些缓存技术(这些都是其次吧)...

猜你喜欢

转载自oyhk.iteye.com/blog/1552360