关于分布式架构

首先将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(五)分布式索引架构的更多相关文章

  1. 五分钟DBA:浅谈伪分布式数据库架构

    [IT168 技术]12月25日消息,2010互联网行业技术研讨峰会今日在上海华东理工大学召开.本次峰会以“互联网行业应用最佳实践”为主题,定位于互联网架构设计.应用开发.应用运维管理,同时,峰会邀请 ...

  2. SolrCloud之分布式索引及与Zookeeper的集成--转载

    原文地址:http://josh-persistence.iteye.com/blog/2234411 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检索类库,Solr是以Luc ...

  3. (转) SolrCloud之分布式索引及与Zookeeper的集成

    http://blog.csdn.net/ebay/article/details/46549481 作者:Wang, Josh 一.概述 Lucene是一个Java语言编写的利用倒排原理实现的文本检 ...

  4. spring boot / cloud (十五) 分布式调度中心进阶

    spring boot / cloud (十五) 分布式调度中心进阶 在<spring boot / cloud (十) 使用quartz搭建调度中心>这篇文章中介绍了如何在spring ...

  5. FileNet P8 Content Engine 的分布式部署架构

    摘抄笔记:http://www.ibm.com/developerworks/cn/data/library/techarticle/dm-1307wanghaining/ 前言 对于集团公司,企业内 ...

  6. Java 多线程爬虫及分布式爬虫架构探索

    这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...

  7. zz《分布式服务架构 原理、设计与实战》综合

    这书以分布式微服务系统为主线,讲解了微服务架构设计.分布式一致性.性能优化等内容,并介绍了与微服务系统紧密联系的日志系统.全局调用链.容器化等. 还是一样,每一章摘抄一些自己觉得有用的内容,归纳整理, ...

  8. MySQL分布式数据库架构:分库、分表、排序、分页、分组、实现教程

    MySQL分库分表总结: 单库单表 : 单库单表是最常见的数据库设计,例如,有一张用户(user)表放在数据库db中,所有的用户都可以在db库中的user表中查到. 单库多表 : 随着用户数量的增加, ...

  9. Java 多线程爬虫及分布式爬虫架构

    这是 Java 爬虫系列博文的第五篇,在上一篇 Java 爬虫服务器被屏蔽,不要慌,咱们换一台服务器 中,我们简单的聊反爬虫策略和反反爬虫方法,主要针对的是 IP 被封及其对应办法.前面几篇文章我们把 ...

随机推荐

  1. 漫步Java------初识java

    一. Java语言概述 语言:是人与人之间用于沟通的一种方式. 例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语. 计算机语言(编程语言): 人与计算机交流的方式.如果人要与计算 ...

  2. php优秀框架codeigniter学习系列——安装,配置

    下载 可在官网下载,我使用的是CodeIgniter-3.1.7. 目录 打开程序目录,可看到目录结构. 我这里做一点小的修改,新建了一个 index 目录,将 index.php 和一些静态文件放入 ...

  3. python day08作业

  4. ubuntu sublime text key

    使用方法 打开 Sublime Text 3 的 “Help”–“Enter Licence”,然后根据版本选择输入下面的注册码. 注册码 所有这些注册码都经过测试(2016-05-12),适用于所有 ...

  5. HttpClient官方sample代码的深入分析(连接池)

    前言   之前一直使用apache的httpclient(4.5.x), 进行http的交互处理. 而httpclient实例则使用了http连接池, 而一旦涉及到连接池, 那会不会在使用上有些隐藏很 ...

  6. TS 基础数据类型

    1.基础数据类型 Boolean布尔值   Number数字 String字符串  Array数组 Tuple元组  Enum枚举   Any    void Boolean布尔值:true/fals ...

  7. ZOJ4067 Books(贪心)

    题目链接:传送门 题目大意: DG在书店买书,从左到右第i本书价格为ai.DG从左走到右,能买就买.如果已知DG买了m本书,问他原本最多有多少钱.若无上限,输出“Richman”,若不可能买这么多书, ...

  8. HDU 1711:Number Sequence(KMP模板,求位置)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. Prism for WPF

    Prism for WPF Prism for WPF初探(构建简单的模块化开发框架)   先简单的介绍一下Prism框架,引用微软官方的解释: Prism provides guidance to ...

  10. (17)什么是jQuery(jq的流程和基本操作)

    jQuery就是对原生js二次封装的工具类(在jq叫构造函数) jQuery就是一堆方法的集合,jq对象就可以直接调用这些方法来完成指定的需求 使用jq的流程: 1.在HTML页面倒入jq.js文件 ...