关于分布式架构

首先将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. python django 创建虚拟环境

    DRF---django-rest-framework: 1.通过一个案例简单回顾一下django, 一.前后端分离,不分离 不分离:前端页面的显示,都是由后端返回的,就是说后端处理了参数,数据库,之 ...

  2. 线程简述(Thread)

    线程: 进程是一个正在运行的程序,例如电脑上现在在运行的qq,浏览器,电脑管家,这些都是进程 线程就是每一个进程中的一个执行单元,每一个进程至少一个线程,可以有多个线程,例如浏览器上每一个打开的网页都 ...

  3. Python基础1--Python的安装

    一.python的安装 Windows: 1) https://www.python.org/下载 2) 傻瓜式安装 3) 设置python环境变量 计算机-属性-高级系统设置-环境变量,将C:\Py ...

  4. js实现瀑布流以及加载效果

    一.瀑布流是个啥? 瀑布流,是比较流行的一种网站页面布局,视觉表现为参差不齐的多栏布局,随着页面滚动条向下滚动,这种布局还会不断加载数据块并附加至当前尾部. 最早采用瀑布流布局的网站是Pinteres ...

  5. 【Python】数据库练习-1

    三十四 数据库 1.     查看数据库命令 2.     使用某个数据库 3.     查看当前在哪个库 4.     查看当前数据库中有哪些表 5.     查询表中数据 6.     建库:cr ...

  6. ES6 对象的扩展 Object.is()

    ES5 比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===).它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0. ES6 提出“Same-va ...

  7. 操作cookie篇

    1.设置cookie setcookie(key,value); 2.设置cookie有效期(默认值0,浏览器关闭失效,PHP_INT_MAX最大值,永久不失效,time()-1,删除cookie) ...

  8. c++将数字转换成固定长度的字符串

    c++将数字转换成固定长度的字符串 将数字转换为字符串,且设置为固定长度的,不足补零. string num2str(int i) { ]; sprintf(ss,"%04d",i ...

  9. C++数组初始化

    局部数组:没有默认值,如果声明的时候不定义,则会出现随机数(undefined): 全局数组:声明时不赋值,默认值为0

  10. C#读取文件夹下所有指定类型,并返回相应类型数据

    C#读取文件夹下所有文件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...