冀州网站优化,我的世界做圆网站,cn域名多少钱一年,网站建设导航一、索引类型
索引#xff0c;可以理解是我们的目录#xff0c;看一本书的时候#xff0c;可以根据目录准确快速定位到某一页#xff0c;那么索引就可以帮我们快速定位到某条数据在庞大的数据表的哪一个位置。
我们常见的索引包括正排索引和倒排索引
1、正排索引
正排索…一、索引类型
索引可以理解是我们的目录看一本书的时候可以根据目录准确快速定位到某一页那么索引就可以帮我们快速定位到某条数据在庞大的数据表的哪一个位置。
我们常见的索引包括正排索引和倒排索引
1、正排索引
正排索引是以文档的ID为关键字表中记录文档中每个字段的位置信息查找时扫描表中每个文档中字段的信息直到找出所有包含查询关键字的文档
比如MySQL的B树索引 只有叶子节点存放完整的数据有时叶子结点也不存放即每个节点只存放索引的字段上图为主键id得到了id再根据id回表查询完整的数据这就是正排索引的完整流程
2、倒排索引
倒排索引是根据索引的字段内容进行统一每个分词记录好哪些数据的索引字段有这个分词以及这个词语出现在那段索引内容的第几个位置获取到数据的id根据id再拿完整数据 关于倒排索引更详细的请参考这篇文章
ElasticSearch倒排索引机制_elasticsearch采用 倒排的检索机制-CSDN博客
两种索引查找顺序 二、逻辑上的基本概念
我们类比MySQL中的概念来理解ES当中的这些专业概念
ES中的概念关系型数据库说明索引库indices)Databases 数据库indices是index的复数代表许多的索引类型typeTable 数据表类型是模拟mysql中的table概念一个索引库下可以有不同类型的索引比如商品索引订单索引其数据格式不同不过这会导致索引库混乱因此未来版本中会移除这个概念文档documentRow 行存入索引库原始的数据比如每一条商品信息就是一个文档字段fieldColumns 列文档中的属性映射配置mappings表结构字段的数据类型、属性、是否索引、是否存储等特性
1、索引
一个索引相当于数据库是多个相似文档的集合必须要指定索引名相当于指定要查询的数据库才能进行搜索
一个索引由一个名字来标识必须全部是小写字母并且当我们要对这个索引中的文档进行索引、搜索、更新和删除的时候都要使用到这个名字
它除了保存许多文档之外还会保存倒排索引库其中记录了每一个词项出现过的文档总数在对应的文档中一个具体词项出现的总次数词项在文档中的顺序每个文档的长度所有文档的平均长度等等相关信息。
2、类型
这个概念在较新的版本中已经摒弃不过多介绍
3、文档
一个文档是可以被索引的一个基本单元相当于数据库中的一条数据索引和搜索数据的最小单位是文档
结合上面的倒排索引可以知道倒排索引存储包含了索引文件以及数据文件
在我们查询的时候一般使用term词项先去倒排索引库中查询到文档_id然后根据_id去文档库中找到最初上传上去的所有文档原始内容_source当然前提是上传的时候有保存原始数据
倒排索引库
term词项 _id 词频、位置
term词项 _id 词频、位置
term词项 _id 词频、位置
...
文档库
_index_type_id _version _source_id _version _source_id _version _source...
4、字段
相当于数据库表的字段每个字段有不同的类型
5、映射
Mapping是对处理数据时的方式和规则作出一定的限制如字段的类型、默认值、分析器、是否被索引等映射定义了每个字段的类型、字段所使用的分词器等。
三、物理上的基本概念
集群
一个集群就是由一个或多个节点组织在一起它们共同持有整个的数据并一起提供索引和搜索功能 集群有哪些角色 Master节点
Master角色的主要职责是负责集群层面的相关操作管理集群变更如创建或删除索引跟踪哪些节点是群集的一部分并决定哪些分片分配给相关的节点。
仅投票节点
仅投票节点用来凑数的如果只部署了两个候选主节点当一个节点挂掉后集群将会不可用加入了仅投票节点则不一样有了仅投票节点可以帮助快速选择一个主节点出来并且仅投票节点不会选为主节点不存储数据所以消耗的资源也很小。
数据节点
数据节点主要是存储索引数据的节点执行数据相关操作CRUD、搜索聚合操作等。
预处理节点
预处理操作运行在索引文档之前即写入数据之前通过事先定义好的一系列processors(处理器)和pipeline管道对数据进行某种转换、富化预处理完之后再进行索引数据落盘
仅协调节点
协调节点将请求转发给保存数据的数据节点每个数据节点在本地执行请求并将结果返回给协调节点。
协调节点收集完数据合将每个数据节点的结果合并为单个全局结果对结果收集和排序的过程可能需要很多CPU和内存资源。
所以就是分发 - 汇总的作用
节点
一个节点是集群中的一个服务器作为集群的一部分它存储数据参与集群的索引和搜索功能
和集群类似一个节点也是由一个名字来标识的默认情况下这个名字是一个随机的漫威漫画角色的名字这个名字会在启动的时候赋予节点
分片
分片的存在是为了解决单个索引大量文档的存储问题、以及搜索是响应慢等问题。 比如一个具有10亿文档的索引占据1TB的磁盘空间而任一节点都没有这样大的磁盘空间或者单个节点处理搜索请求响应太慢为了解决这个问题Elasticsearch提供了将索引划分成多份的能力这些份就叫做分片。 将一个索引划分成了多份每一份就称之为分片每个分片也是一个功能完善的“索引”这个“索引”可以被放置到集群的任意节点上通过分的思想可以突破单机在存储空间和处理性能上的限制这是分布式系统的核心目的
至于一个分片怎样分布它的文档怎样聚合回搜索请求是完全由Elasticsearch管理的对于作为用户的你来说这些都是透明的。
副本
而对于分布式存储而言还有一个重要特性是冗余因为分布式的前提是接受系统中某个节点因为某些故障退出为了保证在故障节点退出后数据不丢失同一份数据需要拷贝多份存在不同节点上
副本的作用
在分片/节点故障的情况下提供了高可用性 因为这个原因注意副本分片从不与主分片置于同一节点上这一点非常重要的扩展你的搜索量/吞吐量 因为搜索可以在所有的副本上并行运行总之每个索引可以被分成多个分片
段
segment来自于lucene因为ES底层就是使用的lucene一个分片包含一组segmentsegment是最小的数据单元
Elasticsearch每隔一段时间产生一个新的segment里面包含了新写入的数据lucene的数据写入会先写如到缓存buffer中当达到一定数量以后会flush成文一个segment写入到磁盘当中每个segement有自己独立的索引可以单独查询。