Elasticsearch框架基础概念
Posted chenxitag
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch框架基础概念相关的知识,希望对你有一定的参考价值。
Elasticsearch(ES)是一个基于Lucene构建开源分布式搜索引擎并提供Restful接口。
Es是一个分布式文档数据库(JSON数据格式存储,类似MongoDB),JSON中的每个字段数据都可作为搜索条件,并且能够扩展至数以百计的服务器存储以及处理PB(PetaByte)级的数据。可在短时间内存储、搜索和分析大量的数据。
PB级级别: 拍字节(Petabytes),计算机存储容量单位,也常用PB来表示。1PB=1024TB==2^50字节。
Es优势:
横向可扩展性:
只需增加服务器,修改配置后启动Es就可并入集群
分片机制提供更好的分布性:
同一个索引分成多个分片(sharding),这点类似于HDFS的块机智,分别治理可提升处理效率
高可用:
提供复制(replica)机制,一个分片可以设置多个复制,使得某台服务器在宏碁的情况下,集群仍旧可以照常运行,并会把服务器宏碁丢失的数据信息复制恢复到其他可用节点上
Elasticsearch应用场景:
大型分布式日志分析系统ELK(elasticsearch(存储日志)+ logstash(收集日志)+ kibana(展示数据))。
Es存储结构:
Es是文件存储,面向文档型数据库,类似于MongoDB,用JSON作为文档序列化的格式
Es与数据库区别:
关系数据库 => 数据库(Database) => 表(Table) => 行(Row) => 列(columns) Elasticsearch=> 索引(index) => 类型(Type) => 文档 (Documents) => 字段(Fields)
#注意:从ES 7.0.0开始,移除Type(类型)这个概念,Type 字段那里变为固定值 _doc Elasticsearch=> 索引(index) => _doc => 文档 (Documents) => 字段(Fields)
Es版本控制:
1.为什么要进行版本控制
为了保证数据在多线程操作下的准确性
2.内部版本控制和外部版本控制
内部版本控制: _version自增长,修改数据后,_version会自动+1
外部版本控制:为了保持_version与外部版本控制的数值一致,使用version_type=external检查数据当前的version值是否小于请求中的version值
3.悲观锁和乐观锁
9200和9300端口的区别:
倒排索引:
ES如何解决高并发:
Shards分片:代表索引分片,ES可以把一个完整的索引分成多个分片,好处是可以把一个大的索引拆分成多个,分布到不同节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。
Replicas副本:代表索引副本,ES可以设置多个索引的副本。
副本的作用:
1.提高系统的容错性,某个节点某个分片损坏或丢失时,可以从副本中恢复
2.提高ES查询效率,ES会自动对搜索请求进行负载均衡
ES集群核心原理分析:
1.每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储,每个分片都会分布式在不同的节点上进行部署,该分片成为Primary shards主分片。
注意:索引主分片数量定后,不能被修改
路由算法: shard = hash(routing) % number_of_primary_shards
如果number_of_primary_shards在查询的时候取余发生变化,无法获取到该数据
2.每一个主分片为了实现高可用,都会有自己对应的副本,主分片对应的副本不能存放在同一台服务器上,主分片可以和其他副本存放在同一个Node节点上
如果此时Node-1节点是leader,Node-1节点down掉,此时会从(Node-2、Node-3)中选举一个节点作为一个Leader,不管某个节点挂掉,都能保证数据不丢失。除非所有节点全部down机
以上是关于Elasticsearch框架基础概念的主要内容,如果未能解决你的问题,请参考以下文章
elasticsearch代码片段,及工具类SearchEsUtil.java