ES学习分享

Elasticsearch是一个基于Apache Lucene的开源搜索引擎,通过简易的API来隐藏Lucene的复杂性。ES的基本结构包括,Cluster集群(由n个节点组成),Node实例节点,Index索引(一系列documents的集合),Shard分片(索引的数据是分配到各个分片的),Replica备份节点(相应有Primay Shard主分片)

640?wx_fmt=png

ES架构

640?wx_fmt=png

ES和RDMS的区别

二、ES不是什么
1、ES不是数据库,不是可靠的数据存储系统。

三、Mapping映射
mapping相当于数据库的表结构,决定了ES在建立倒排索引、进行检索时对文档采取的相关策略,如数字类型、日期类型、文件类型等。在写数据前ES不强制要求创建mapping,因为ES有动态识别和创建的机制,但是非常不建议使用ES的动态识别和创建的机制,因为很多情况下这并非你所需要。推荐的做法是在写数据之前仔细的创建mapping

四、Template模板
模板是描述表结构(mapping)和表设置(setting)的数据结构,在ES中创建一个索引模板,其本质就是包含mapping及分片信息,模板中有个属性 template 表示该模板用来匹配什么样的索引。比如"template:timingsoa-*“,创建的所有以timingsoa开头的索引,将会应用这个模板,一般用来匹配按周期创建的索引,例如 timingsoa-20190417

{
“template”: “timingsoa-*”,
“settings”: {
“index”: {
“refresh_interval”: “1s”,
“number_of_shards”: “4”,
“number_of_replicas”: “1”
}
},
“mappings”: {
“timingsoa”: {
“properties”: {
“time”: {
“format”: “yyyy-MM-dd HH:mm:ss”,
“type”: “date”
},
“className”: {
“type”: “keyword”
},
“methodName”: {
“type”: “keyword”
},
“invokeNo”: {
“type”: “keyword”
},
“threadId”: {
“type”: “keyword”
},
“invokeIp”: {
“type”: “keyword”
},
“message”: {
“analyzer”: “ik_smart”,
“type”: “text”
},
“lineNumber”: {
“type”: “integer”
},
“invokeSerialNum”: {
“type”: “integer”
}
}
}
}
}
索引存在Linux服务器的文件系统上,背后是文件系统,不是类似HDFS的文件系统

五、Routing路由
rouing就是hash key,这个key决定写入和查询的分片id

六、Alia别名
PUT timingsoa
{
“mappings”: {
“timingsoa”: {
“properties”: {
“time”: {
“format”: “yyyy-MM-dd HH:mm:ss”,
“type”: “date”
},
“className”: {
“type”: “keyword”
},
“methodName”: {
“type”: “keyword”
},
“invokeNo”: {
“type”: “keyword”
},
“threadId”: {
“type”: “keyword”
},
“invokeIp”: {
“type”: “keyword”
},
“message”: {
“analyzer”: “ik_smart”,
“type”: “text”
},
“lineNumber”: {
“type”: “integer”
},
“invokeSerialNum”: {
“type”: “integer”
}
}
},
“aliases”: {
“admin_w”: {},
“admin_r”: {}
}
}
为什么需要别名https://www.elastic.co/guide/en/elasticsearch/guide/current/index-aliases.html

七、ES集群
1、节点发现
多播方式,也是ES的默认使用方式,但是无法跨网络组建集群。另外一种是单播方式,可以跨网络组建集群

2、主节点选举
所有配置有master:true的节点,根据节点id进行排序,然后取出第一个作为主节点

3、存活检测
有两种错误检测方式,一种是master节点ping集群中所有其他的节点来验证他们是否存活,另一种是每个节点ping master节点来验证它是否存活

4、容灾
ES中的index,首先会进行分片,每一个分片数据一般都会有自己的副本数据,ES分配分片的策略会保证同一个分片数据和自己的副本不会分配到同一个节点上

4.1 恢复的目标是保证集群中分片的副本数不变

5、扩容和缩容
整个过程不影响集群的读写功能,但是由于多了复制分片和迁移分片的过程,集群的读写性能受影响

八、ES写入文档过程
640?wx_fmt=png
640?wx_fmt=jpeg
图片来自https://zhuanlan.zhihu.com/p/34669354
另外ES没有原地update的能力,所有的update都是标记删除老文档。并发update同一条document,ES内部采用了乐观并发的处理,并发修改的操作直到最后要提交是才加锁检查版本号,如果发现修改之前获取的版本号已经改变(即已经被人修改),那么会抛出这个异常,然后由用户决定如何处理该异常

九、ES查询文档过程
640?wx_fmt=png
640?wx_fmt=jpeg
图片来自 https://zhuanlan.zhihu.com/p/34674517
当然你可以指定perference,指定在主分片查询或者先主后副等等

十、ES索引创建过程
640?wx_fmt=png
十一、ES新节点加入过程
640?wx_fmt=png
十二、ES规范
12.1、Mapping设计规范
1、禁用mapping的dynamic

12.2、索引设计规范
1、设置合理的number_of_shards

12.3、查询规范
1、search type不要用dfs_query_then_fetch,用query_then_fetch足够

十三、其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值