关于分布式架构

首先将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. Android:AndroidManifest.xm中xmlns的作用

    有了它,你就可以alt+/作为提示,提示你输入什么,不该输入什么,什么是对的,什么是错的,也可以理解为语法文件.或者语法判断器什么的 这个主要作用是在运行的时候那些控件的属性都是通过它来识别的,如果上 ...

  2. 惊不惊喜, 用深度学习 把设计图 自动生成HTML代码 !

    如何用前端页面原型生成对应的代码一直是我们关注的问题,本文作者根据 pix2code 等论文构建了一个强大的前端代码生成模型,并详细解释了如何利用 LSTM 与 CNN 将设计原型编写为 HTML 和 ...

  3. ChinaCock界面控件介绍-CCNavigateTitle

    先看一下实际项目中的运行效果,如图,通过品牌的导航栏,显示不同品牌的商品列表. 完全基于ChinaCock控件包中CCNavigateTitle组件实现的,这是一个可视控件,从组件面板上拖放一个到Fo ...

  4. File类操作中的IOException异常

     代码: File file= newFile("demo"+File.separator+"HelloWorld.txt"); file.createNe ...

  5. JAVA线程sleep与wait区别

    sleep就是正在执行的线程主动让出cpu,cpu去执行其他线程,在sleep指定的时间过后,cpu才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep方法并不会释放锁,即使当前线程使 ...

  6. [转]An Intuitive Explanation of Convolutional Neural Networks

    An Intuitive Explanation of Convolutional Neural Networks https://ujjwalkarn.me/2016/08/11/intuitive ...

  7. pdb的数量限制

    Decide How to Configure the CDB --搜索文档 Prepare to create the CDB by research and careful planning. T ...

  8. freeSSHd (Auth fail)错误!以及Xmanager的(ssh服务器拒绝了密码,请再试一次)错误!

    参考文档:http://blog.csdn.net/zhangliang_571/article/details/45598939 (Auth fail) 以及(ssh服务器拒绝了密码,请再试一次)  ...

  9. NYOJ 737:石子合并(一)(区间dp)

    737-石子合并(一) 内存限制:64MB 时间限制:1000ms 特判: No 通过数:30 提交数:37 难度:3 题目描述: 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆. ...

  10. 51Nod 1070:Bash游戏 V4(斐波那契博弈)

    1070 Bash游戏 V4  基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次拿的数量最少1个 ...