资源经验分享ES学习分享

ES学习分享

2019-10-22 | |  64 |   0

原标题:ES学习分享

原文来自:CSDN      原文链接:https://blog.csdn.net/b644ROfP20z37485O35M/article/details/101043229


一、ES是什么


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

m01.png

ES架构

m02.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写入文档过程



m03.png




m04.png

图片来自https://zhuanlan.zhihu.com/p/34669354




另外ES没有原地update的能力,所有的update都是标记删除老文档。并发update同一条document,ES内部采用了乐观并发的处理,并发修改的操作直到最后要提交是才加锁检查版本号,如果发现修改之前获取的版本号已经改变(即已经被人修改),那么会抛出这个异常,然后由用户决定如何处理该异常


九、ES查询文档过程



m05.png




m06.png

图片来自 https://zhuanlan.zhihu.com/p/34674517




当然你可以指定perference,指定在主分片查询或者先主后副等等


十、ES索引创建过程



m07.png



十一、ES新节点加入过程



m08.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足够


十三、其他


1、倒排索引


免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:Struts2--拦截器(Interceptor)简介和实现原理

下一篇:自定义View画直线、圆环数据变动View

用户评价
全部评价

热门资源

  • Python 爬虫(二)...

    所谓爬虫就是模拟客户端发送网络请求,获取网络响...

  • TensorFlow从1到2...

    原文第四篇中,我们介绍了官方的入门案例MNIST,功...

  • TensorFlow从1到2...

    “回归”这个词,既是Regression算法的名称,也代表...

  • 机器学习中的熵、...

    熵 (entropy) 这一词最初来源于热力学。1948年,克...

  • TensorFlow2.0(10...

    前面的博客中我们说过,在加载数据和预处理数据时...