2024年最全初识ElasticSearch_es服务器资源隔离(3),2024最新Golang大厂面试真题大全

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Elasticsearch ,和大多数 NoSQL 数据库类似,是扁平化的。索引是独立文档的集合体。 文档是否匹配搜索请求取决于它是否包含所有的所需信息。

扁平化有以下优势:

  • 索引过程是快速和无锁的。
  • 搜索过程是快速和无锁的。
  • 因为每个文档相互都是独立的,大规模数据可以在多个节点上进行分布。
应用层联结

参看官网:应用层联接 | Elasticsearch: 权威指南 | Elastic

我们使用ES来模拟关系型数据库,假设我们对用户及其博客文章进行索引,先通过文档的index,type和id构造成的主键 创建用户文档,

ES服务器日志如下,

按照上面的权威指南操作,创建一个通过id链接到用户的博客,最上面提到本书基于 Elasticsearch 2.x 版本,这里使用的是Elasticsearch 7.x 版本。7.x版本不允许一个index下有多个type了。

调用查询映射接口,my_index索引已经映射到了name、email、dob的数据类型了。

ES关闭后,后面重新开启,查询ES服务器下的所有索引,查询结果如下,记录着之前创建过的索引,说明ES也是会对存储数据进行持久化。

按照上面的权威指南文档进行学习好像并没有那么流畅,我们重新找一份其他的较为可信的API文档进行学习。

基本概念

参看阿里云文档先来学习一下ES的一些基本概念,

集群(Cluster)

一个Elasticsearch集群由一个或多个ES节点组成,并提供集群内所有节点的联合索引和搜索能力(所有节点共同存储数据)。一个集群被命名为唯一的名字(默认为elasticsearch),集群名称非常重要,因为节点需要通过集群的名称加入集群。

请确保在不同的环境使用不同的集群名称,否则会导致节点添加到错误的集群中。

节点(Node)

一个节点是集群中的一个服务器,用来存储数据并参与集群的索引和搜索。和集群类似,节点由一个名称来标识,默认情况下,该名称是在节点启动时分配给节点的随机通用唯一标识符(UUID)。您也可以自定义任意节点的名称,节点名称对于管理工作很重要,因为通过节点名称可以确定网络中的哪些服务器对应于Elasticsearch集群中的哪些节点。

一个节点可以被添加到指定名称的集群中。默认情况下,每个节点会被设置加入到名称为elasticsearch的集群中,这意味着,如果在您在网络中启动了某些节点(假设这些节点可以发现彼此),它们会自动形成并加入名称为elasticsearch的集群中。

一个集群可以拥有任意多的节点。此外,如果在您的网络中没有运行任何Elasticsearch节点,此时启动一个节点会创建一个名称为elasticsearch的单节点集群。

索引(Index)

一个索引是一个拥有一些相似特征的文档的集合(相当于关系型数据库中的一个数据库)。例如,您可以拥有一个客户数据的索引,一个商品目录的索引,以及一个订单数据的索引。一个索引通常使用一个名称(所有字母必须小写)来标识,当针对这个索引的文档执行索引、搜索、更新和删除操作的时候,这个名称被用来指向索引。Elasticsearch与关系型数据库的对应关系如下表所示,

Elasticsearch关系型数据库
索引(index)数据库(Database)
文档类型(type)表(Table)
文档(document)一行数据(Row)
字段(field)一列数据(Column)
映射(mapping)数据库的组织和结构(Schema)

类型(Type)

一个类型通常是一个索引的一个逻辑分类或分区,允许在一个索引下存储不同类型的文档(相当于关系型数据库中的一张表),例如用户类型、博客类型等。目前已经不支持在一个索引下创建多个类型,并且类型概念已经在后续版本中删除,这也就是为什么上面在同一个索引下创建用户和博客失败的原因。

文档(Document)

一个文档是可以被索引的基本信息单元(相当于关系型数据库中的一行数据)。例如,您可以为一个客户创建一个文档,或者为一个商品创建一个文档。文档可以用JSON格式来表示。在一个索引中,您可以存储任意多的文档,且文档必须被索引。

字段(Field)

组成文档的最小单位。相当于关系型数据库中的一列数据。

映射(Mapping)

用来定义一个文档以及其所包含的字段如何被存储和索引,例如在mapping中定义字段的名称和类型,以及所使用的分词器。相当于关系型数据库中的Schema。

分片(Shards)

代表索引分片,Elasticsearch可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上,构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

一个分片可以是主分片或副本分片。Elasticsearch 7.0以下版本默认为一个索引创建5个主分片,并分别为每个主分片创建1个副本分片,7.0及以上版本默认创建1个主分片和1个副本分片。两者区别如下:

分片类型支持处理的请求数量是否可修改其他说明
主分片支持处理查询和索引请求。在创建索引时设定,设定后不可更改。索引内任意一个文档都存储在一个主分片中,所以主分片的数量和大小决定着索引能够保存的最大数据量。 注意 :主分片不是越多越好,因为主分片越多,Elasticsearch性能开销也会越大。
副本分片支持处理查询请求,不支持处理索引请求。可在任何时候添加或删除副本分片。副本分片对搜索性能非常重要,主要体现在以下两个方面:
  • 提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。
  • 提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡。
    |

Recovery

代表数据恢复或数据重新分布,Elasticsearch在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

Gateway

代表Elasticsearch索引快照的存储方式,Elasticsearch默认优先将索引存放到内存中,当内存满时再将这些索引持久化存储至本地硬盘。gateway对索引快照进行存储,当这个Elasticsearch集群关闭再重新启动时就会从gateway中读取索引备份数据。Elasticsearch支持多种类型的gateway,有本地文件系统(默认)、分布式文件系统、Hadoop的HDFS和阿里云的OSS云存储服务。

Discovery.zen

代表Elasticsearch的自动发现节点机制,Elasticsearch是一个基于p2p的系统,它先通过广播寻找存在的节点,再通过多播协议进行节点之间的通信,同时也支持点对点的交互。

Transport

Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认使用TCP协议进行交互。同时,通过插件的方式集成,也支持使用HTTP协议(JSON格式)、thrift、servlet、memcached、zeroMQ等传输协议进行交互。

数据类型(Data Type)

那么,ES支持的数据类型有哪些呢?字符串类型、数值类型、浮点类型、逻辑类型、日期类型、范围类型、二进制类型、复合类型等。详细参看文末链接,以及官网文档:

Field data types | Elasticsearch Guide [7.14] | Elastic

这里提出个问题,为什么ES在后续版本中不允许一个索引下有多个类型?

查阅资料显示是,因为同一个索引(index)下的不同类型(type)下如果有相同的字段(field)会存在冲突,导致Lucene处理效率下降。

传统sql数据库中,各个数据库表之间是相互独立的,即使有相同的字段也不会产生冲突,即表A中的列与表B中的列无关。但ES不同Type下的相同Field就会有问题,那么我们先来了解一下底层数据结构。

倒排索引(Inverted Index)

传统mysql的数据结构使用的是B+树进行数据存储,那ElasticSearch中的数据是如何存储的呢?

倒排索引也可以叫反向索引,一般进行搜索时都是通过正向索引去遍历得到对应的值,而反向索引则是通过值得到对应的文档集合。

倒排索引源于实际应用中需要根据属性的值来查找记录,lucene是基于倒排索引实现的。倒排索引由两个部分组成:单词词典和倒排文件。

  • 单词词典:它是由文档集合中出现过的所有单词构成的字符串集合,单词词典内每条索引项记载单词本身的一些信息以及指向“倒排列表”的指针。
  • 倒排文件:所有单词的倒排列表顺序的存储在磁盘的某个文件里,这个文件即被称为倒排文件,倒排文件是存储倒排索引的物理文件。

Lucene是apache软件基金会发布的一个开放源代码的全文检索引擎工具包。

关于Lucene的内容可以参看链接:https://segmentfault.com/a/1190000013822385

ES和Lucene的关系可以参看链接:Elasticsearch中数据是如何存储的? - 51CTO.COM

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值