HK 学习笔记
好久都没有写过博客了,自从换了公司后,一直在忙...时间就更少了,但是学到的东西却是非常多!今天我把学到的东西记下来,当做自己的一个笔记吧,也算是一个学习的心得
搜索引擎架构设计
介绍下我这次说的搜索引擎的主要技术
node.js Sphinx oracle mongodb 下面简单介绍下
node.js 它是一个号称无阻塞的轻量级框架
主要编写语言是javascript
Sphinx
相信大家对它已经很熟悉了吧,是一个基于SQL的全文检索引擎 ,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索...
oracle 数据库
mongodb
高效读写nosql,具体不多说了
好了,下面就是架构层面
先看看架构图
好了,结构图有了我就开始说说整个图的各个部分吧
搜索引擎
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查询内容,最后返回给客户
这就是一个完整的过程(其中细节还有很多,很多,这里就不多说了)
最后,我们可能给搜索引擎加一些缓存技术(这些都是其次吧)...