ElasticeSearch(五)分布式索引架构
关于分布式架构
首先将ES默认每个索引是5个分片,这样做得目的是两个一个索引的时候速度更快(将数据写到小分片的尾部比写入大分片尾部更加快);另外一个是当数据量达到一定程度之后,分片查询,在汇总(scater-gathter)这种模式更加简单一些。
ES的分片奠定了ES在分布式存储的地位,也意味着ES天生就是多节点部署的,节点数=分片数*(副本数 + 1)。这里有个问题,到底是多分片还是多索引,还是多索引优于多分片;但是差别都不大,为什么这么说,你要明白每个分片本质上是Lucene的一个索引,这个才是真正的索引计算单元;所以在ES里面的索引其实是对于分布式Lucene里面的索引的一个封装,或者说是master;关于查询套路,索引可以通过名称定位,分片可以通过路由定位;
ES为了保证持续提供服务,提供了副本(replica)机制,就是数据的部分,副本是基于分片的,一旦主分片挂了,那么会自动切换到副本进行查询。但是缺点就是占用空间,尤其对于海量数据而言,硬盘压力会比较大,所以副本数需要考虑。默认是1副本。
路由查询策略
刚才在比较分片和索引的时候,提到了多分片场景下可以指定路由来进行地位,避免向所有分片下发查询,导致查询速度下降。使用路由的套路是这样的,首先在创建索引的时候就要指定路由,像下面这样:
curl -XPUT localhost:9200/books/doc/1?routing=A -d '{ "title" : "Document"}'
在创建的时候,就记录了路由器为A,此时在索引完成后,将会在路由表(Route Table)中记录一条路由名称"A"所指向的分片。之后,在你进行查询的时候也要指定同名路由即可定位到指定的分片进行查询:
curl -XGET 'localhost:9200/documents/_search?pretty&q=*&routing=A'
这样查询首先会去路由表中查询路由A对应的分片,然后再去对应的分片中进行查询。
那么现在有一个问题:如果分片大小满了怎么办,如果ES的机制自动进行存储的平衡,我们再次通过路由A查找数据,但是此时数据已经分配到别的机器上面怎么办?这个问题还有待研究。
我们知道分片是Lucene的一个索引,路由定位也是分片级别,但是一个分片其实是可以对应多个路由信息,所以不能依赖于分片而放弃查询条件,这个还是要有的。这样,我们在一次查询中可以指定多个路由进行查询(如下所示),但是,索引的时候只能指定一个路由。
curl -XGET 'localhost:9200/documents/_search?routing=A,B'
分配意识
那么下面介绍一下ES里面的分片的自动优化部署的特性:分配意识(Allocation Awareness);简单地讲,就是ES将会自动将主分片和副本分布到两台不同的机器,避免要挂一起挂的场景。
自动部署里面有很多配置,就不多说了,这里要明白的是ES里面的部署机制,其实这些配置都是默认,从理解ES的角度来讲是有价值,但是从操作层面来讲大多数时候不需要关注。
(分布式)查询偏好策略
最后说一下查询偏好,通过设置查询偏好,可以指定分布式查询的模式,或者优先策略:
_primary:只在主节点查;
_primary_firest:只有主节点挂了,再查副本;
_local:优先本地查;
_only_node:XXX:指定节点查询;
_prefer_node:XXX:优先指定节点查询;
_shard:0,1,2:指定分片查询。
ElasticeSearch(五)分布式索引架构的更多相关文章
- 五分钟DBA:浅谈伪分布式数据库架构
[IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...
- SolrCloud之分布式索引及与Zookeeper的集成--转载
原文地址:http://josh-persistence.iteye.com/blog/2234411 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库,Solr是以Luc ...
- (转) SolrCloud之分布式索引及与Zookeeper的集成
http://blog.csdn.net/ebay/article/details/46549481 作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检 ...
- spring boot / cloud (十五) 分布式调度中心进阶
spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...
- FileNet P8 Content Engine 的分布式部署架构
摘抄笔记:http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1307wanghaining/ 前言 对于集团公司,企业内 ...
- Java 多线程爬虫及分布式爬虫架构探索
这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...
- zz《分布式服务架构 原理、设计与实战》综合
这书以分布式微服务系统为主线,讲解了微服务架构设计.分布式一致性.性能优化等内容,并介绍了与微服务系统紧密联系的日志系统.全局调用链.容器化等. 还是一样,每一章摘抄一些自己觉得有用的内容,归纳整理, ...
- MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程
MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...
- Java 多线程爬虫及分布式爬虫架构
这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...
随机推荐
- Oracle 12c中新建pdb用户登录问题分析
Oracle 12c新建用户登录问题分析1 用sys用户新建用户,提示公用用户名或角色名无效.原因:Oracle 12c中,在容器中建用户(或者应该称为使用者),须在用户名前加c##.默认登录连接的就 ...
- Vuex的学习笔记一
以下的解释,是在知乎看到的,感觉粗俗易懂. 组件之间的作用域独立,而组件之间经常又需要传递数据. A 为父组件,下面有子组件 B 和 C. A 的数据可以通过 props 传递给 B 和 C.A 可以 ...
- <context:annotation-config/>和<mvc:annotation-driven/>及解决No mapping found for HTTP request with URI [/role/getRole] in DispatcherServlet with name 'springmvc-config'
1:什么时候使用<context:annotation-config> 当你使用@Autowired,@Required,@Resource,@PostConstruct,@PreDest ...
- 2019-02-28-day001-python介绍
今日内容大纲: 01 cpu 内存 硬盘 操作系统 CPU:中央处理器,相当于人大脑.---------飞机 内存:临时存储数据. 8g,16g,-----------高铁 1,成本高. 2,断电即消 ...
- VSFTP服务配置
FTP连接及传输模式控制连接:TCP 21 ,用于发送FTP命令信息数据连接:TCP 20 ,用于上传.下载数据数据连接的建立类型:主动模式.被动模式 主动模式:服务器主动发起数据连接·首先由客户端向 ...
- python3:利用SMTP协议发送QQ邮件+附件
转载请表明出处:https://www.cnblogs.com/shapeL/p/9115887.html 1.发送QQ邮件,首先必须知道QQ邮箱的SMTP服务器 http://service.mai ...
- CountDownLatch & CyclicBarrier
CountDownLatch 在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待.用给它的代数初始化CountDownLatch,且计数器无法被重置.当前计数到达0之前,await方 ...
- 数据结构中的列表、元组、字典、集合 ,深浅copy
数据结构:数据结构是计算机存储数据和组织数据的方式.数据结构是指相互之间存在一种或多种特定关系的数据元素的集合.在python中主要的数据类型统称为容器. 而序列(如列表.元组).映射(如字典).集合 ...
- spring的multipartResolver和java后端获取的MultipartHttpServletRequest方法对比 (附:遇到的坑)
转载:https://www.cnblogs.com/yskcoder/p/4718198.html 这两天在用spring进行上传上遇到问题,今天进行了问题的排查,这个过程也增加了我看spring源 ...
- ACM-ICPC 2018 焦作赛区网络预赛- G:Give Candies(费马小定理,快速幂)
There are N children in kindergarten. Miss Li bought them NNN candies. To make the process more inte ...