Elstaticsearch原理详解这一篇就够了

Elasticsearch是一个开源的分布式全文检索引擎,擅长于快速检索大规模数据。它使用Java开发,内置Lucene核心,通过RESTful API简化了全文搜索的复杂性。适用于检索、统计分析、数据可视化等多种场景。ES的架构包括Gateway、DistributedLucene Directory、Mapping、索引模块等,支持分片和副本以提高可用性和容错性。写入数据经过内存buffer、translog和segment file的过程,确保数据安全并实现准实时搜索。搜索时,协调节点分发请求到各个shard,query和fetch阶段分别完成结果合并和文档获取。更新和删除操作利用倒排索引实现。倒排索引是ES高效搜索的基础,将关键词映射到文档ID。
摘要由CSDN通过智能技术生成

目录

1、Es是什么

2、适用场景

3、为什么是ES

4、架构详解

5、核心概念

6、写入数据原理

7、搜索原理

8、删除/更新原理

9、倒排索引


1、Es是什么

 官网地址:Elasticsearch:官方分布式搜索和分析引擎 | Elastic

ES=elaticsearch简写, Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。 
Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

lucene与es的关系:

1、Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。

2、Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

2、适用场景

1、检索相关数据; 
2、返回统计结果; 
3、速度更快。

4、新系统开发尝试使用ES作为存储和检索服务器; 
5、现有系统升级需要支持全文检索服务,需要使用ES。 

实际项目开发实战中,几乎每个系统都会有一个搜索的功能,当搜索做到一定程度时,维护和扩展起来难度就会慢慢变大,所以很多公司都会把搜索单独独立出一个模块,用ElasticSearch等来实现。

近年ElasticSearch发展迅猛,已经超越了其最初的纯搜索引擎的角色,现在已经增加了数据聚合分析(aggregation)和可视化的特性,如果你有数百万的文档需要通过关键词进行定位时,ElasticSearch肯定是最佳选择。当然,如果你的文档是JSON的,你也可以把ElasticSearch当作一种“NoSQL数据库”, 应用ElasticSearch数据聚合分析(aggregation)的特性,针对数据进行多维度的分析。

3、为什么是ES

思考:大规模数据如何检索?

如:当系统数据量上了10亿、100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 
1)用什么数据库好?(mysql、sybase、oracle、达梦、神通、mongodb、hbase…) 
2)如何解决单点故障;(lvs、F5、A10、Zookeep、MQ) 
3)如何保证数据安全性;(热备、冷备、异地多活) 
4)如何解决检索难题;(数据库代理中间件:mysql-proxy、Cobar、MaxScale等;) 
5)如何解决统计分析问题;(离线、近实时)

传统数据库的解决方案

对于关系型数据,我们通常采用以下或类似架构去解决查询瓶颈和写入瓶颈: 
解决要点: 
1)通过主从备份解决数据安全性问题; 
2)通过数据库代理中间件心跳监测,解决单点故障问题; 
3)通过代理中间件将查询语句分发到各个slave节点进行查询,并汇总结果 

这里写图片描述

非关系型数据库的解决方案

对于Nosql数据库,以mongodb为例,其它原理类似: 
解决要点: 
1)通过副本备份保证数据安全性; 
2)通过节点竞选机制解决单点问题; 
3)先从配置库检索分片信息,然后将请求分发到各个节点,最后由路由节点合并汇总结果 

这里写图片描述

另辟蹊径——完全把数据放入内存怎么样? 

我们知道,完全把数据放在内存中是不可靠的,实际上也不太现实,当我们的数据达到PB级别时,按照每个节点96G内存计算,在内存完全装满的数据情况下,我们需要的机器是:1PB=1024T=1048576G 
节点数=1048576/96=10922个 
实际上,考虑到数据备份,节点数往往在2.5万台左右。成本巨大决定了其不现实!

从前面讨论我们了解到,把数据放在内存也好,不放在内存也好,都不能完完全全解决问题。 
全部放在内存速度问题是解决了,但成本问题上来了。 
为解决以上问题,从源头着手分析,通常会从以下方式来寻找方法: 
1、存储数据时按有序存储; 
2、将数据和索引分离&

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值