开源的搜索引擎——详细概述

开源的搜索引擎

 

搜索服务主要分为两个部分:爬虫crawler和查询searcher。

爬虫的工作策略一般则可以分为累积式抓取(cumulative crawling)和增量式抓取(incrementalcrawling)两种。

1    爬虫

1.1  nutch

        Nutch依赖Hadoop数据结构,该数据结果可以用于批量处理。现在Nutch可以不依赖于Tomcat或Lucence来建立索引,可以单独工作。

Nutch并不是一个可扩展性很强的爬虫,是一个专门为搜索引擎定制的网络爬虫,虽然有一套强大的插件机制,但定制插件并不能修改爬虫的遍历算法、去重算法和爬取流程。

不过Nutch需要使用者熟悉网络爬虫原理、hadoop开发基础及linux shell,且需要熟悉Apache Ant。

架构比较重

 

1.1.1 nutch环境搭建

从下载链接:http://nutch.apache.org/downloads.html中下载bin包用来部署环境。Nutch有两个主版本1.x和2.x,1.x版本是基于Hadoop架构的,底层存储使用的是HDFS,而2.x通过使用ApacheGora,使得Nutch可以访问HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStore等NoSQL。

1)先设置JAVA_HOME环境变量。PS:查看MAC中java路径: /usr/libexec/java_home -V

        2)创建urls文件夹,其中创建test文件,在test文件里面存放http://nutch.apache.org

        3)编辑conf/regex-urlfilter.txt将原有的

# accept anything else

+.

替换为你以正则表达式匹配的你希望爬的地址。例如:

+^http://([a-z0-9]*\.)*nutch.apache.org/

用正则表达式来限制爬虫的范围仅限于nutch.apache.org这个域。

4)修改conf/nutch-default.xml

其中大多数内容可以直接使用,可以定义爬取属性

修改http.agent.name 属性

 

http.agent.name 

My Nutch Spider

并确保plugin.includes 属性是indexer-solr

5)然后执行:$ bin/crawl urls crawl 2 进行爬取。

PS:如果是源码文件,则解压后在目录中使用ant命令进行编译,编译缺少的jar可以手动下载后直接放到解压目录中即可。可以使用ant clean命令来删除文件。

Nutch1.x从1.7版本开始不再提供完整的部署文件,只提供源代码文件及相关的build.xml文件,这就要求用户自己编译Nutch,而整个Nutch2.x版本都不提供编译完成的文件,想要学习Nutch2.x的功能,须自己手动编译文件。编译之后多了两个目录:build和runtime

 

1.1.2 Nutch原理

inject要crawl的URL入口初始化到DB。

Generate,以一个batchId为入参,标记新的一批要被fetch的URL

fetch开始实际抓取网页内容,

parse是解析内容,会多生成一些key-value对

updatedb会更新db,把outlinks里面的URL抽取出来,去重,再生成新的数据,进行下一轮generate。

Index把网页都进行索引建立,在搜索引擎服务里面就可以进行搜索。

 

1.1.3 开发环境搭建     

        安装ant,mac 下使用命令:brewinstall ant命令来进行安装。

nutch的下载地址:

        http://nutch.apache.org/downloads.html

        src源码包下载解压后,使用ant命令进行编译。

1.1.4 概念

WebDB:存储网页数据和连接信息

Fetch lists:将WebDB所存储的连接分成多个组,来用于分布式检索

Fetchers:检索Fetch list中的内容并下载到本地,共有两项输出:分别是连接的update信息和内容content

Updates:更新WebDB的页面检索状态

WebDB、updates、fetch lists和fetchers组成循环结构,不断运行下去,来确保所得到的Web镜像是最新的

Content:界面内容,获取内容之后,Nutch便可以根据它来创建索引并执行查询操作

Indexers:对目标Content创建索引,当索引内容较大时,可把索引划分成多个索引片段,然后分配给不同的seracher实现并行检索

Searchers:实现查询功能的同时也会缓存content

Webservers:有两种角色:

1处理用户的交互请求(Nutch Search Client)

2从searchers中获取查询结果(HTTP Server)

fetchers和searchers两个节点所对应的操作可放到分布式环境(Hadoop)中去完成

创建索引及查询的操作可通过solr框架来实现

 

1.2     WebMagic

webmagic的是无须配置、便于二次开发的爬虫框架,提供简单灵活的API,只需少量代码即可实现一个爬虫。

下载地址如下:

http://webmagic.io/download.html

 

1.3     Crawler4j

Crawler4j是一个单机版的垂直爬虫,其遍历算法是一种类似泛爬的算法。Crawler4j并没有提供定制http请求的接口,并不适用于需要定制http请求的爬取业务(例如模拟登陆、多代理切换)

 

1.4  jsoup

1.5     WebCollector

WebCollector是一个无须配置、便于二次开发的Java爬虫框架(内核),它提供精简的的API,只需少量代码即可实现一个功能强大的爬虫。

 

1.6  Heritrix

 

1.7  pyspider

python爬虫

 

1.8  scrapy

python爬虫

 

1.9  小结

爬虫框架

语言

插件

上手难度

支持分布式

支持JS页面抓取

特点

Nutch

Java

支持,开发复杂

支持

不支持

专门为搜索引擎设计

Crawler4j

Java

不支持

不支持

不支持

简单

WebMagic

Java

支持

不支持

不支持

scrapy的Java版本

WebCollector

Java

支持

不支持

支持

内置selenium

Heritrix

Java

支持

不支持

不支持

扩展性较好

scrapy

python

支持

扩展可支持

不支持

扩展性强

pyspider

python

支持

支持

支持

强大的爬虫管理和监控

 

 

1.10 爬虫分类

 

 

2    solr

Solr是一个基于Lucene的Java搜索引擎服务器。提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式),附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,扩展了 Lucene,沿用了Lucene的相关术语。Solr 创建的索引与 Lucene 搜索引擎库完全兼容。Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。

 

建索引的时候需要使用Solr,需要安装并启动一个Solr服务器。

下载链接:http://lucene.apache.org/solr/mirrors-solr-latest-redir.html

有源码包和二进制包。

Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)

cd solr-x/example

        在解压目录中执行:

#bin/solr start

# java -jar start.jar

浏览器打开 http://localhost:8983/solr/admin/

如果可以访问则说明访问成功。

        停止服务使用命令:

#bin/solr stop -all

 

3    序列化

目的

1、以某种存储形式使自定义对象持久化;

2、将对象从一个地方传递到另一个地方;

3、使程序更具维护性。

 

3.1  protocol Buffers

 

        Protocol buffers是Google开源的一个序列化框架;是一个用来序列化结构化数据的技术,支持多种语言诸如C++、Java以及Python语言,可以使用该技术来持久化数据或者序列化成网络传输的数据。

 

3.2  Thrift

 

3.3  JSON

        JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。

 

3.4    XML

        XML 序列化用处很多,包括对象持久化和数据传输。但是一些 XML 序列化技术实现起来可能很复杂。

 

3.5    Avro

        Avro是Hadoop的一个子项目,由Hadoop的创始人DougCutting(也是Lucene,Nutch等项目的创始人)牵头开发。Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。

 

4    存储方式

4.1  HBASE

        Hbase启动指南如下:http://hbase.apache.org/book.html#quickstart

Hbase下载地址如下:http://www.apache.org/dyn/closer.cgi/hbase/

        有源码包和二进制包下载。

 

 

4.2     Cassandra

 

 

4.3  Accumulo

 

4.4  Avro

 

 

4.5  Mongodb

Mongodb入门使用可以查看如下链接:

        http://blog.csdn.net/notbaron/article/details/76789501

        下载链接:

        http://www.mongodb.org/downloads

 

5    hadoop

Hadoop是大集群上运行程序的框架。框架提供了应用的可靠性和数据移动。实现了Map/Reduce可以应用分割成碎片可以在集群的任何一个上运行。提供了HDFS用于存储计算节点的数据,在集群间提供了可观的带宽。Map/Reduce和HDFS从框架上来实现容错。

是在将Nutch中的分布式文件系统和MapReduce软件分隔开来形成了一个新的项目,即“Hadoop”

下载地址:http://hadoop.apache.org/releases.html#Download

5.1    Map/Reduce

 

5.2       HDFS

 

 

6    可视化

6.1      Kibana

        Kibana是开源的分析与可视化平台,用于和Elasticsearch一起使用的。可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。

        下载地址如下:

https://www.elastic.co/downloads/kibana

 

 

 

7    Nutch+hadoop

        Nutch可以使用两种模式来运行,本地的或部署的。默认不会和hadoop一起发布,运行在本地模式,即一个机器上运行一个线程。这个适用于小型站点来爬去和索引,但是很多人选择nutch是因为他和hadoop集群一起的部署运行模式。可以从分布式文件系统(HDFS)和MapReduce过程中受益。

 

8    搜索

8.1     ElasticSearch

最流行的开源搜索引擎之一

 

9      SolrCloud

 

10                          ZooKeeper

 

11                          页面分析渲染

11.1 Phantomjs

 

11.2 Selenium

        Web自动化工具Selenium,内核采用WebDriver

 

 

11.3 crawler4j

 

 

11.4  htmlunit

HtmlUnit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用HtmlUnit分析页面上的内容。

 

12                          浏览器内核

12.1 Trident

Trident(IE内核):该内核程序在 1997 年的 IE4 中首次被采用,是微软在 Mosaic("马赛克",这是人类历史上第一个浏览器,从此网页可以在图形界面的窗口浏览)代码的基础之上修改而来的,并沿用到 IE11,也被普遍称作 "IE内核"。

12.2 Webkit

chrome 将 Webkit内核 深入人心, Webkit 的鼻祖其实是 Safari。chrome内核已经是 blink。

12.3 chromium

chromium fork 自开源引擎 webkit,把代码梳理得可读性提高很多,以前可能需要一天进行编译的代码,现在只要两个小时就能搞定。因此 Chromium 引擎和其它基于 WebKit 的引擎所渲染页面的效果也是有出入的。所以有些地方会把 chromium 引擎和 webkit 区分开来单独介绍,而有的文章把 chromium 归入 webkit 引擎中。

12.4 Blink

Google 决定从 WebKit 衍生出自己的 Blink 引擎(后由 Google 和 OperaSoftware 共同研发),将在 WebKit 代码的基础上研发更加快速和简约的渲染引擎,并逐步脱离 WebKit 的影响,创造一个完全独立的 Blink 引擎。这样维系 Google 和苹果之间技术关系的纽带就这样被切断了。

12.5 Presto

Presto 是挪威产浏览器 opera的 "前任" 内核,最新的 opera 浏览器早已将之抛弃从而投入到了谷歌大本营。

 

 

 

 

 

12.6 Gecko

        Gecko(Firefox 内核):Netscape6 开始采用的内核,后来的Mozilla FireFox(火狐浏览器) 也采用了该内核。

 

13                          搜索引擎

lucene是apache下开源搜索引擎内核,基于Java技术,处理索引,拼写检查,点击高亮和其他分析,分词等技术。

而solr则是基于lucene的搜索界面。提供XML/HTTP和 JSON/Python/Ruby API,提供搜索入口,点击高亮,缓存,备份和管理界面。

nutch原来都是lucene下的子项目。但后来nutch独立成为独立项目。nutch是2004年由俄勒冈州立大学开源实验室模仿google搜索引擎创立的开源搜索引擎,后归于apache旗下。nutch主要完成抓取,提取内容等工作。

hadoop原来也是nutch下的分布式任务子项目,现在也是apache下的顶级项目。nutch可以利用hadoop进行分布式多任务抓取和分析存储工作。

使用lucene,nutch,solr,hadoop能完成一个中型的搜索引擎工作的。

13.1 ElasticSearch

        下载地址:https://www.elastic.co/products/elasticsearch

        运行:bin/elasticsearch (或者 bin\elasticsearch.bat on Windows)

        浏览器运行:

http://localhost:9200/ 

 

14                          代理

14.1 Squid

 

 

14.2 Privoxy

 

14.3 Varnish

 

14.4 Polipo

 

14.5  Tinyproxy

 

 

 

 

15                          项目管理

15.1 Maven

Maven使用声明构建项目,并进行依赖管理,使用约定而不是配置进行构建。优于Apache Ant,ant采用了一种过程化的方式进行配置,所以维护起来困难。

 

15.2 Gradle

Gradle采用增量构建。Gradle通过Groovy编程而不是传统的XML声明进行配置。Gradle可以很好地配合Maven进行依赖管理,并且把Ant脚本当作头等公民。

15.3 ant

使用可以参考:http://blog.csdn.net/notbaron/article/details/77595620

下载连接:http://ant.apache.org/bindownload.cgi

 

16                          一个开源引擎搭建

使用Nutch,mongodb,elasticSearch,kibana来搭建。

        下载地址可参见各个章节中说明。其中JDK下载地址如下:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

        使用的包分别如下:

jdk-8u144-linux-x64.tar.gz

apache-nutch-1.13-bin.tar.gz 

kibana-5.5.2-linux-x86_64.tar.gz

elasticsearch-5.5.2.zip

apache-ant-1.10.1-bin.tar.gz

16.1 设置JAVA环境变量

tar -xvfjdk-8u144-linux-x64.tar.gz

echo 'exportJAVA_HOME=/root/jdk1.8.0_144' >> ~/.bash_profile

echo 'export PATH=$PATH:/root/jdk1.8.0_144/bin'>> ~/.bash_profile

16.2 设置ant

解压ant压缩包

tar -xvf apache-ant-1.10.1-bin.tar.gz

echo 'export PATH=$PATH:/root/apache-ant-1.10.1/bin' >>~/.bash_profile

16.3 设置MongoDB

解压:tar -xvfmongodb-linux-x86_64-rhel70-3.4.7.tgz

mvmongodb-linux-x86_64-rhel70-3.4.7 mongodb

cd mongodb/

mkdir -p log/conf/ data/

viconf/es.yml

内容如下(可参考:

https://docs.mongodb.com/v2.6/reference/configuration-options/):

启动mongodb数据库:

#bin/mongod-f conf/es.yml

检测数据库:

#bin/mongo

> show dbs

> exit

16.4 elasticsearch

解压:unzipelasticsearch-5.5.2.zip

配置路径:

echo 'export PATH=$PATH:/root/elasticsearch-5.5.2/bin' >>~/.bash_profile

编辑文件:

#vi config/elasticsearch.yml

增加内容如下:

        elasticsearch不能用root启动,需要新建用户。

        #useradd -g root es

        #chmod 775 -R elasticsearch-5.5.2

        #su – es

        #cat /root/.bash_profile >>~/.bash_profile

        #elasticsearch

        检查elasticsearch:

curl -XGET'http://localhost:9200'

 

 

 

 

 

 

16.5 Kibana

 

16.6 nutch

 

17                          参考

17.1 macos部署mysql

macos部署mysql:http://blog.csdn.net/notbaron/article/details/68952997

17.2 nutch部署:

http://blog.csdn.net/gobitan/article/details/13916981

17.3 nutch官方wiki指南:

https://wiki.apache.org/nutch/NutchTutorial

elasticsearch官方指南:

https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html

17.4 nutchhadoop教程

https://wiki.apache.org/nutch/NutchHadoopTutorial

17.5 hadoop官方wiki指南

https://wiki.apache.org/hadoop/

17.6 Mongodb使用指南:

https://docs.mongodb.com/v2.6/reference/configuration-options/

 

17.7 Nutch+MongoDB+ES

http://www.aossama.com/search-engine-with-apache-nutch-mongodb-and-elasticsearch/

17.8 Hadoop十年

http://www.infoq.com/cn/news/2016/01/hadoop-ten-years-Doug?utm_campaign=rightbar_v2&utm_source=infoq&utm_medium=news_link&utm_content=link_text

17.9 浏览器内核

http://www.cnblogs.com/Leo_wl/p/5119719.html

 

 

18                          TIPS

18.1 红帽安装桌面

yum grouplist

yum groupinstall-y  "Server with GUI"

 

 

 

19                          材料

19.1 中国2016大数据技术大会材料

http://download.csdn.net/meeting/meeting_detail/25

 

http://download.csdn.net/meeting

 

 

 

20                          大数据开源工具

 

类别

名称

备注

查询引擎

Phoenix

Salesforce公司出品,Apache HBase之上的一个SQL中间层,完全使用Java编写

Stinger

原叫Tez,下一代Hive, Hortonworks主导开发,运行在YARN上的DAG计算框架

Presto

Facebook开源

Spark SQL

Spark上的SQL执行引擎

Pig

基于Hadoop MapReduce的脚本语言

Cloudera Impala

参照Google Dremel实现,能运行在HDFSHBase上,使用C++开发

Apache Drill

参照Google Dremel实现

Apache Tajo

一个运行在YARN上支持SQL的分布式数据仓库

Hiv

基于Hadoop MapReduceSQL查询引擎

流式计算

Facebook Puma

实时数据流分析

Twitter Rainbird

分布式实时统计系统,如网站的点击统计

Yahoo S4

Java开发的一个通用的、分布式的、可扩展的、分区容错的、可插拔的无主架构的流式系统

Twitter Storm

使用JavaClojure实现

Samza

samza是一个分布式的流式数据处理框架(streaming processing),它是基于Kafka消息队列来实现类实时的流式数据处理的。(准确的说,samza是通过模块化的形式来使用kafka的,因此可以构架在其他消息队列框架上,但出发点和默认实现是基于kafka)

DataTorrent

基于Hadoop2.X构建的实时流式处理和分析平台,每秒可以处理超过10亿个实时事件

Spark Streaming

Spark Streaming是一种构建在Spark上的实时计算框架,它扩展了Spark处理大规模流式数据的能力。

Apache Flink

Apache Flink是一个高效、分布式、基于Java实现的通用大数据分析引擎,它具有分布式 MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析,且提供了基于JavaScalaAPI

迭代计算

Apache Hama

建立在Hadoop上基于BSPBulk Synchronous Parallel)的计算框架,模仿了GooglePregel

Apache Giraph

建立在Hadoop上的可伸缩的分布式迭代图处理系统,灵感来自BSPbulk synchronous parallel)和GooglePregel

HaLoop

迭代的MapReduce

Twister

迭代的MapReduce

Spark GraphX

GraphX Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collaborative Filtering)API,可以认为是GraphLab(C++)Pregel(C++)Spark(Scala)上的重写及优化,

离线计算

Hadoop MapReduce

经典的大数据批处理系统

Berkeley Spark

使用Scala语言实现,和MapReduce有较大的竞争关系,性能强于MapReduce

Apache Flink

Apache Flink是一个高效、分布式、基于Java实现的通用大数据分析引擎,它具有分布式 MapReduce一类平台的高效性、灵活性和扩展性以及并行数据库查询优化方案,它支持批量和基于流的数据分析,且提供了基于JavaScalaAPI

键值存储

LevelDB

Google开源的高效KV编程库,注意它只是个库

RocksDB

Facebook开源的,基于GoogleLevelDB,但提高了扩展性可以运行在多核处理器上

HyperDex

下一代KV存储系统,支持stringsintegersfloatslistsmapssets等丰富的数据类型

TokyoCabinet

日本人Mikio Hirabayashi(平林干雄)开发的一款DBM数据库,注意它只是个库(大名鼎鼎的DBM数据库qdbm就是Mikio Hirabayashi开发的),读写非常快

Voldemort

一个分布式键值存储系统,是Amazon Dynamo的一个开源克隆,LinkedIn开源

Amazon Dynamo

亚马逊的KV模式的存储平台,无主架构

Tair

淘宝出品的高性能、分布式、可扩展、高可靠的KV结构存储系统,专为小文件优化,并提供简单易用的接口(类似Map),Tair支持JavaC版本的客户端

Apache Accumulo

一个可靠的、可伸缩的、高性能的排序分布式的KV存储系统,参照Google Bigtable而设计,建立在HadoopThriftZookeeper之上。

Redi

使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、单机版KV数据库。从2010315日起,Redis的开发工作由VMware主持

Memcache

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon)是用C写的,但是客户端可以用任何语言来编写,并通过Memcached协议与守护进程通信。

OceanBas

支持海量数据的高性能分布式数据库系统,实现了数千亿条记录、数百TB数据上的跨行跨表事务

Amazon SimpleDB

一个可大规模伸缩、用 Erlang编写的高可用数据存储

Vertica

惠普2011收购VerticaVertica是传统的关系型数据库,基于列存储,同时支持MPP,使用标准的SQL查询,可以和Hadoop/MapReduce进行集成

Cassandra

Hadoop成员,Facebook2008Cassandra开源,基于O(1)DHT的完全P2P架构

HyperTable

搜索引擎公司Zvents针对BigtableC++开源实现

FoundationDB

支持ACID事务处理的NoSQL数据库,提供非常好的性能、数据一致性和操作弹性

HBas

BigtableHadoop中的实现,最初是Powerset公司为了处理自然语言搜索产生的海量数据而开展的项目

文件存储

CouchDB

面向文档的数据存储

MongoDB

文档数据库

Tachyon

加州大学伯克利分校的AMPLab基于Hadoop的核心组件开发出一个更快的版本Tachyon,它从底层重构了Hadoop平台。

KFS

GFSC++开源版本

HDF

GFSHadoop中的实现

资源管理

Twitter Mesos

Google Borg的翻版

Hadoop Yarn

类似于Mesos

日志收集系统

Facebook Scribe

Facebook开源的日志收集系统,能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计分析处理,常与Hadoop结合使用,Scribe用于向HDFSPush日志

Cloudera Flume

Cloudera提供的日志收集系统,支持对日志的实时性收集

Logstash

日志管理、分析和传输工具,可配合kibanaElasticSearch组建成日志查询系统

Fluentd

Fluentd是一个日志收集系统,它的特点在于其各部分均是可定制化的,你可以通过简单的配置,将日志收集到不同的地方。开源社区已经贡献了下面一些存储插件:MongoDB, Redis, CouchDB,Amazon S3, Amazon SQS, Scribe, 0MQ, AMQP, Delayed, Growl等等。

Kibana

为日志提供友好的Web查询页面

消息系统

StormMQ

 

ZeroMQ

很底层的高性能网络库

RabbitMQ

AMQP基础上完整的,可复用的企业消息系统

Apache ActiveMQ

能力强劲的开源消息总线

Jafka

开源的、高性能的、跨语言分布式消息系统,最早是由Apache孵化的Kafka(由LinkedIn捐助给Apache)克隆而来

Apache Kafka

Linkedin201012月份开源的分布式消息系统,它主要用于处理活跃的流式数据,由Scala写成

分布式服务

ZooKeepe

分布式锁服务,PoxOS算法的实现,对应GoogleChubby

RPC

Apache Avro

Hadoop中的RPC

Facebook Thrift

RPC,支持C++/Java/PHP等众多语言

集群管理

Nagios

监视系统运行状态和网络信息的监视系统

Ganglia

UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。

Apache Ambari

Hadoop成员,管理和监视Apache Hadoop集群的开源框架

基础设施

LevelDB

Google顶级大牛开发的单机版键值数据库,具有非常高的写性能

SSTable

源于Googleorted String Table

RecordIO

源于Google

Flat Buffers

针对游戏开发的,高效的跨平台序列化库,相比Proto Buffers开销更小,因为Flat Buffers没有解析过程

Protocol Buffers

Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。

Consistent Hashing

1997年由麻省理工学院提出,目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似,基本解决了在P2P环境中最为关键的问题——如何在动态的网络拓扑中分布存储和路由。

Netty

JBOSS提供的一个Java开源框架,提供异步的、事件驱动的网络应用程序框架,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

BloomFilter

布隆过滤器,1970年由布隆提出,是一个很长的二进制矢量和一系列随机映射函数,可以用于检索一个元素是否在一个集合中,优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。

搜索引擎

Nutch

开源Java实现的搜索引擎,诞生Hadoop的地方。

Lucene

一套信息检索工具包,但并不包含搜索引擎系统,它包含了索引结构、读写索引工具、相关性工具、排序等功能。

SolrCloud

基于SolrZookeeper的分布式搜索,Solr4.0的核心组件之一,主要思想是使用Zookeeper作为集群的配置信息中心

Solr

Solr是基于Lucene的搜索。

ElasticSearch

开源的(Apache2协议),分布式的,RESTful的,构建在Apache Lucene之上的的搜索引擎。

Sphinx

一个基于SQL的全文检索引擎,可结合MySQLPostgreSQL做全文检索,可提供比数据库本身更专业的搜索功能,单一索引可达1亿条记录,1000万条记录情况下的查询速度为毫秒级。

SenseiDB

Linkin公司开发的一个开源分布式实时半结构化数据库,在全文索引的基础封装了Browse Query Language (BQL,类似SQL)的查询语法。

数据挖掘

Mahout

Hadoop成员,目标是建立一个可扩展的机器学习库

Spark MLlib

Spark成员,可扩展机器学习库

Iaas

OpenStack

美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权云平台管理的项目,它不是一个软件。这个项目由几个主要的组件组合起来完成一些具体的工作,旨在为公共及私有云的建设与管理提供软件的开源项目。6个核心项目:Nova(计算,Compute),Swift(对象存储,Object),Glance(镜像,Image),Keystone(身份,Identity),Horizon(自助门户,Dashboard),Quantum & Melange(网络&地址管理),另外还有若干社区项目,如Rackspace(负载均衡)、Rackspace(关系型数据库)。

Docker

应用容器引擎,让开发者可打包应用及依赖包到一个可移植的容器中,然后发布到Linux机器上,也可实现虚拟化。

Kubernetes

Google开源的容器集群管理系统

Imctfy

Google开源的Linux容器

CloudStack

CloudStack是一个开源的具有高可用性及扩展性的云计算平台。支持管理大部分主流的hypervisor,如KVM虚拟机,XenServerVMwareOracle VMXen等。

监控管理

Dapper

Google生产环境下的大规模分布式系统的跟踪系统

Zipkin

Twitter开源的参考Google Dapper而开发,使用Apache Cassandra做为数据存储系统

 

 

 

 

21                          阅读笔记

Cutting认为他的成功主要归功于两点,一是对自己工作的热情;二是目标不要定得过大,要踏踏实实,一步一个脚印。

每一个行业都正在致力于围绕其信息系统构建数据驱动型运营模式

我们在本世纪取得的大部分进展将来自于对所产生的数据的理解的增加。

你可能感兴趣的:(搜索技术)