`
qindongliang1922
  • 浏览: 2141110 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:116013
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:124368
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:58241
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:70189
社区版块
存档分类
最新评论

ElasticSerach基本概念

    博客分类:
  • ELK
阅读更多

基本概念:

学习es必须得了解一些它的基本概念,对学会学好es起着至关重要的作用。


近实时:

es是一个近实时的搜索引擎,这意味着它会有轻微的延迟(正常情况上是1秒),从你添加一个文档知道它
能被搜索出来,这是由它的底层框架Lucene决定的。

集群:
一个集群通常由1台或多台节点组成,它们一起协作,横跨所有的节点,提供了统一的索引和搜索能力
一个集群必须有一个唯一的名字,默认是elasticsearch,这个名字标识是重要的,因为一个节点只能在一个集群中服务
在他们启动的时候,会通过名字,来找到并加入集群。

所以,务必确保你不要重复使用同一个集群名字,不然的话,你有可能会发现你的节点加入了一个错误的集群中,
所以你应该在不同的环境使用,使用不同的配置文件,这一点与maven里面的filter的功能是非常相似的,假如我有3套环境,
开发,测试,线上,那么我就可以命名dev,test,product三个配置文件来区分,在不同的环境下,使用不用的参数进行编译

一个节点,最好只为一个集群服务,虽然也可以配置多个独立的集群,通过集群名隔离,但是从性能上来说,一个节点只为一个
集群服务通常是最优的方案。


节点:

一个节点通常是一个集群中的一部分, 它可以存储你的数据,也在集中参与,集群的索引和搜索能力,像集群一样,节点也是有名字的
,默认情况下如果不设置,那么es将会为随机生成一个名字,在它启动的时候,当然你可以指定的它的名字,如果你不像使用默认随机
生成的名字,这个名字也是重要的,它对于管理你的节点与网络时,非常方便,通过你定义的名字。

一个节点可以通过配置集群名,来决定它究竟为那个集群服务,默认情况下,如果你不配置这个名字,而直接启动了多个服务节点,那么他们会
自动组成一个名为elasticsearch的集群服务,前提是你的网络支持多播自动发现,当然这种模式,不建议在生产环境上使用,但通过指定几个master加上单播通信是比较好的一个运行方式。

索引:

一份索引是一系列文档doc的集合,通常情况下他们具有逻辑上相似的特征,比如,你有一个索引存的是客户数据
另一份索引存的是商品类目数据,还有一个索引存的是订单数据,一个索引也能只能有一个唯一的名字标识,而且
索引名必须是小写的,通常会通过索引名来完成对索引的增删改查操作,在单个集群中,你可以定义很多你想要的索引。

类型:
在索引的内部,你可以定义一个或多个类型,一个类型是逻辑上的类目或者分区在你的索引中,它的语义
对使用方来说是透明完整的,大多数情况下,一个类型定义组成由多个字段,例如假设你正在运行一个
博客平台的来存储你所有的数据,在单个索引中,在这个索引中,你可能定义一个类型是用户数据,另一个类型是
博客数据,最后一个是评论数据。

文档:
一个doc是基本的信息单元,它可以被索引,例如你可以有一个单独客户doc,商品doc和订单doc,它由json组成,
所以具备了很强的扩平台传输数据能力,这也为es支持多种语言客户端带来了方便。


分片和副本:

一个索引可能存储一个巨大数量的数据而远远超出了单台机器的上限,例如你有10亿的数据,它的索引大小是
1TB,可能你的单个磁盘已经容量不下,或者你可能搜索性能非常低下,在单台机器上,为了解决这个问题,
es提供了切分大索引为多个分片的能力,这就是分而治之的思想,当你创建索引时,你可以定义,分片的数量,
每个分片相对于它自己而言都是一份完成的索引,它可以被放在集群中任意的节点上。


分片有两个比较重要的原因:
它允许你水平扩展你的集群服务
它允许你分布式并行的操作横跨多台的机器,以此来提高性能

至于它如何分布式的查询多个节点的数据,在归并返回结果,对用户来说是透明的,用户是感觉不到它的背后发生了
多么复杂的交互和查询。

在云计算的环境中,容错是非常重要的,任何不可抗拒的原因都有可能造成你的机器宕机或挂掉,为了解决这个
问题es提供了一个或多个副本分片来提供索引的容错性,

副本也有两个比较重要的原因
它提供高可靠的能力,在shard突然挂掉的时候,基于这个原因,我们建议将副本数据和主分片的数据不能放在
同一个机器上

它也提供了主从模式的搜索能力,大大提高了系统的并发搜索能力


总结一下:

每个索引都可以被切分成多个分片,一个分片也可以有0到多个副本,一个配置了副本策略,每个
索引都有一个主分片,和一个副本分片,副本分片的数据是拷贝主分片的数据,他们的数量在索引创建之前
可能配置,需要注意的是,你可以随时改变副本的数量,但是不能随便改变主分片的数量。



默认情况下,每个索引在es有5个主分片,和一个1副本这意味着,你至少有2台机器在你的集群中,否则
你的集群可以使用,但是会出现黄色警告,告诉你有未被分配的分片,这样一来每份索引你一共有10个shard
来提供服务。


每个es分片其实是一个lucene索引,每个分片最大的索引数量是Integer.MaxValue,所以你可以监控shard的大小来
判断这个分片是否快达到单shard承受能力的上限。

下面看下es索引与传统数据库的概念映射:



最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!


1
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics