elasticsearch的实时搜索性能为啥比solr好

author author     2023-04-06     542

关键词:

网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项。由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎,用来对网络爬虫抓取到的网络资源进行实时的索引和搜索。

搜 索引擎架构在ElasticSearch之上,是一个典型的分布式在线实时交互查询架构,无单点故障,高伸缩、高可用。对大量信息的索引与搜索都可以在近 乎实时的情况下完成,能够快速实时搜索数十亿的文件以及PB级的数据,同时提供了全方面的选项,可以对该引擎的几乎每个方面进行定制。支持RESTful 的API,可以使用JSON通过HTTP调用它的各种功能,包括搜索、分析与监控。此外,还为Java、PHP、Perl、Python以及Ruby等各 种语言提供了原生的客户端类库。

网络爬虫通过将抓取到的数据进行结构化提取之后提交给搜索引擎进行索引,以供查询分析使用。由于搜索引擎的设计目标在于近乎实时的复杂的交互式查询,所以搜索引擎并不保存索引网页的原始内容,因此,需要一个近乎实时的分布式数据库来存储网页的原始内容。

分布式数据库架构在Hbase+Hadoop之上,是一个典型的分布式在线实时随机读写架构。极强的水平伸缩性,支持数十亿的行和数百万的列,能够对网络爬虫提交的数据进行实时写入,并能配合搜索引擎,根据搜索结果实时获取数据。

网 络爬虫、分布式数据库、搜索引擎均运行在普通商业硬件构成的集群上。集群采用分布式架构,能扩展到成千上万台机器,具有容错机制,部分机器节点发生故障不 会造成数据丢失也不会导致计算任务失败。不但高可用,当节点发生故障时能迅速进行故障转移,而且高伸缩,只需要简单地增加机器就能水平线性伸缩、提升数据 存储容量和计算速度。

网络爬虫、分布式数据库、搜索引擎之间的关系:

1、网络爬虫将抓取到的HTML页面解析完成之后,把解析出的数据加入缓冲区队列,由其他两个线程负责处理数据,一个线程负责将数据保存到分布式数据库,一个线程负责将数据提交到搜索引擎进行索引。

2、搜索引擎处理用户的搜索条件,并将搜索结果返回给用户,如果用户查看网页快照,则从分布式数据库中获取网页的原始内容。

整体架构如下图所示:

爬虫集群、分布式数据库集群、搜索引擎集群在物理部署上,可以部署到同一个硬件集群上,也可以分开部署,形成1-3个硬件集群。

网络爬虫集群有一个专门的网络爬虫配置管理系统来负责爬虫的配置和管理,如下图所示:

搜 索引擎通过分片(shard)和副本(replica)实现了高性能、高伸缩和高可用。分片技术为大规模并行索引和搜索提供了支持,极大地提高了索引和搜 索的性能,极大地提高了水平扩展能力;副本技术为数据提供冗余,部分机器故障不影响系统的正常使用,保证了系统的持续高可用。

有2个分片和3份副本的索引结构如下所示:

一个完整的索引被切分为0和1两个独立部分,每一部分都有2个副本,即下面的灰色部分。

在 生产环境中,随着数据规模的增大,只需简单地增加硬件机器节点即可,搜索引擎会自动地调整分片数以适应硬件的增加,当部分节点退役的时候,搜索引擎也会自 动调整分片数以适应硬件的减少,同时可以根据硬件的可靠性水平及存储容量的变化随时更改副本数,这一切都是动态的,不需要重启集群,这也是高可用的重要保 障。
参考技术A 对比性能其实很不好回答,因为没有我还不知道有 benchmark做了很深入的,而且没有偏见的性能对比。

就实时搜索而言(Near
Real Time Search), feature 实现主要是lucene layer. Elasticsearch 比 SOLR
提前实现这个feature。但是现在Solr 也进步了不少,性能差别并没有很大,毕竟底层都是用lucene 和JVM的嘛。
但是因为实现不一样,feature 和 feature 之前性能差别肯定也还是有的。但是不同的use
case,性能对比结果也是不一样。而且两个产品都有很多参数可以调试, 结果也就更不一样了。

就我个人的理解,毕竟
elasticsearch 是2010 年后 才出现的项目,设计和实现上也更加考究,也更容易上手。 Solr的主要问题是直到 solr
cloud, 一直并没有 很好的scale 和 做分布式的办法。SolrCloud release之后 bug 又很多。

加之就
Elastic 这个产品 Stack 而言,search engine
是一块基石。本身产品内部设计架构强调模块化,使得用户很容易在上面搭建自己的扩展插件 (aws plugin 啥的)。然后 Kibana前台UI 和
Logstash 又给产品找来了很多眼球。我想这是Elasticsearch 现在更流行的原因吧。
参考技术B 对比性能其实很不好回答,因为没有我还不知道有 benchmark做了很深入的,而且没有偏见的性能对比。

就实时搜索而言(Near
Real Time Search), feature 实现主要是lucene layer. Elasticsearch 比 SOLR
提前实现这个feature。但是现在Solr 也进步了不少,性能差别并没有很大,毕竟底层都是用lucene 和JVM的嘛。
但是因为实现不一样,feature 和 feature 之前性能差别肯定也还是有的。但是不同的use
case,性能对比结果也是不一样。而且两个产品都有很多参数可以调试, 结果也就更不一样了。

就我个人的理解,毕竟
elasticsearch 是2010 年后 才出现的项目,设计和实现上也更加考究,也更容易上手。 Solr的主要问题是直到 solr
cloud, 一直并没有 很好的scale 和 做分布式的办法。SolrCloud release之后 bug 又很多。

加之就
Elastic 这个产品 Stack 而言,search engine
是一块基石。本身产品内部设计架构强调模块化,使得用户很容易在上面搭建自己的扩展插件 (aws plugin 啥的)。然后 Kibana前台UI 和
Logstash 又给产品找来了很多眼球。我想这是Elasticsearch 现在更流行的原因吧。

redisjson发布官方性能报告,性能碾压es和mongo

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

实时的分布式搜索和分析引擎——elasticsearch

  Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。  但是,Lucene只是一个库。想要使用它,你必须使用Java来... 查看详情

redisjson横空出世,性能碾压es和mongo!(代码片段)

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

redisjson横空出世,性能碾压es和mongodb!!

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

elasticsearch7.8.0版本进阶——近实时搜索(代码片段)

...ff08;per-segment)搜索1.2、更轻量的方式搜索二、为什么Elasticsearch是近实时搜索三、如何解决索引了一个文档然后却没有搜到四、哪种情况不需要每秒刷新4.1、使用Elasticsearch索引大量的日志文件4.2、使用Elasticsearch建立一个大的... 查看详情

redisjson横空出世,性能碾压es和mongo!(代码片段)

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

redisjson横空出世,性能碾压es和mongo!(代码片段)

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

elasticsearch学习笔记1入门

...tml 入门中文权威指南: http://es.xiaoleilu.com/1认识eselasticsearch功能:-全文检索(可以解决DB检索问题(文本检索性能,全文检索等))-分布式的实时文件存储,每个字段都被索引并可被搜索(牛逼)-分布式的实时分析搜索引擎(实... 查看详情

elasticsearch性能调优

ES性能调优 ES的默认配置,是综合了数据可靠性、写入速度、搜索实时性等因素。实际使用时,我们需要根据公司要求,进行偏向性的优化。 写优化 假设我们的应用场景要求是,每秒300万的写入速度,每条500字节左... 查看详情

亿级elasticsearch性能优化

参考技术A最近一年使用Elasticsearch完成亿级别日志搜索平台「ELK」,亿级别的分布式跟踪系统。在设计这些系统的过程中,底层都是采用Elasticsearch来做数据的存储,并且数据量都超过亿级别,甚至达到百亿级别。所以趁着有空,... 查看详情

Solr 与 Elasticsearch 的近实时搜索

】Solr与Elasticsearch的近实时搜索【英文标题】:SolrvsElasticsearchonnearrealtimesearch【发布时间】:2014-02-1715:49:30【问题描述】:我对Solr和Elasticsearch的近实时搜索能力感到困惑。近乎实时的搜索被认为是Elasticsearch相对于Solr的优势之一... 查看详情

elasticsearch是如何做到近实时搜索的?(代码片段)

...发部”设为“星标”,和你一起掌握更多数据库知识ElasticSearch近实时搜索的实现1.近实时搜索1.1实时与近实时实时搜索(Real-timeSearch)很好理解,对于一个数据库系统,执行插入以后立刻就能搜索到刚刚插入... 查看详情

redisjson横空出世!干掉mongodb和es!(代码片段)

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

redisjson横空出世!干掉mongodb和es!(代码片段)

...隔离写入(isolatedwrites),RedisJSON比MongoDB快5.4倍,比ElasticSearch快200倍以上。对于隔离读取(isolatedreads),RedisJSON比MongoDB快12.7倍,比ElasticSearch快500倍以上。在混合工作负载场景中,实时更新不会影响RedisJSON的搜索... 查看详情

elasticsearch入门简介

 Elasticsearch是一个实时分布式搜索和分析引擎。它让你以前所未有的速度处理大数据成为可能。它用于全文检索、结构化查询、分析以及将这三者混合使用。Elasticsearch是一个基于ApacheLucene(TM)的开源搜索引擎。无论是在开源还... 查看详情

elasticsearch架构原理

为什么要学习架构?Elasticsearch的一些架构设计,对我们做性能调优、故障处理,具有非常重要的影响。下面将从Elasticsearch的准实时索引的实现、自动发现、rounting和replica的读写过程,shard的allocate控制使文本可以被搜索?在传统... 查看详情

关于elasticsearch近实时特征的思考(代码片段)

一份文档被索引之后,需要等待一段时间才能被查询到。这一性质维护了es的性能承诺,但也限制了它的应用场景。截至本文撰写之日,es已经更新到了7.x版本。然而,网络中几乎查询不到将其用作企业级主力搜索赋能工具的案... 查看详情

Elasticsearch 分片和副本搜索性能

】Elasticsearch分片和副本搜索性能【英文标题】:Elasticsearchshardandreplicasearchperformance【发布时间】:2020-05-2214:07:38【问题描述】:我试图了解搜索查询是如何在主分片和副本分片之间划分的。我不清楚为什么有人说副本的好处之... 查看详情