接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/

首先上张图,是我根据自己的理解画的,如有错误还请大家指出

几个概念

1、MemSQL有两种类型的表:

  • reference table 参照表 数据分布在主 aggregator和每个leaf节点。每个节点的数据都是完整的(没有分区)。 参照表同过复制从 主 aggregator向每个 leaf节点同步数据。另外参照表的写只能在 主 aggregator进行。
  • sharded table 分布表 数据通过hash分片存储在每 个leaf节点, 每 个leaf节点只有部分数据。

Querying MemSQL

注#官方文档里面说的这个query我理解为是增删改查操作,如理解有误,也请大家指出。

MemSQL在第一次执行一条query时将会编译这条语句并cache到内存中。

用户的query总是被指向一个汇聚器。DDL的操作或者向reference table写数据时必须通过主汇聚器,而其他的DML语句则可以通过任意的汇聚器。

只对reference table进行的query只会在汇聚器执行。汇聚器将不会发送这些query到叶子节点因为每一个汇聚器节点或者叶子节点都存有reference table的一个拷贝。

对sharded table进行的query包含更多:

  • 在最简单的情况下,一个query需要的数据只在一个分区中,因此这个query能直接被forward到正确叶子节点,如INSERT INTO db.table VALUES (15)。除非重写数据库名字让其映射到指定的分区,INSERT INTO db_3.table VALUES (15) 。
  • 如果一个query需要的数据在多个分区中,那么汇聚器将会从多个叶子节点中获取数据。比如说,SELECT COUNT(*) from t 将会发送一个COUNT(*)给每个分区,然后汇总返回,最终返回一行给用户。

一些query会有很多的query转换和汇聚逻辑,但他们都遵循了相同的通用流程。可以在一个query语句中使用EXPLAIN关键字来显示汇聚器和叶子节点之间的执行计划,包括将会发送到叶子节点的重写query。

数据分布

MemSQL将会在分布表上通过每一行的主键哈希来分布数据(哈希分区表)。由于每个主键是唯一的同时hash函数一般又是统一的,所以集群能够相对均匀地分布数据和最小化数据倾斜(data skew)

在创建数据库的时候,MemSQL会拆分数据库到几个分区中。每个分区都有自己的哈希范围。你能够显式地指定分区数量通过PARTITIONS=X选项。默认的话分区的总数是叶子节点数的8倍。

每一个叶子节点上的分区是通过database实现的。当一个分布表被创建的时候,它会根据database的分区数量被拆分。这个表被保存于分区的数据切片中。二级索引是通过每个分区和每行主键作为唯一索引的前缀来被管理的。

如果你运行的一个query需要查找二级索引,那么汇聚器会fan out这个query到集群中的所有分区,每个分区都会去找这个二级索引。

精确匹配shard key的的Query将会被路由到一个单一的叶子节点(我的理解是insert语句或者可以确定hash值的增删改查语句,因为确定了hash值MemSQL就知道这条记录放在哪里了)。否则的话,汇聚器将会发送这个query到集群中并收集结果。你可以使用EXPLAIN关键字来测试创建的query,并查看叶子节点和query分布策略。

Availability Groups

一个高可用组是叶子节点的集合,用于存储冗余数据以确保高可用。每一个高可用组包含了每一个分区的拷贝(一些为master而一些为slave)。目前,MemSQL只支持两个高可用组。你可以设置高可用组的数量通过redundancy_level变量在主汇聚器上。后面我们讨论的是redundancy-2的场景(有就是有两个高可用组的情况)。

每一个在高可用组的叶子节点都有对应的pair节点在其他的高可用组中。当有一个分区失效时,MemSQL将会自动将这个分区的slave分区提升为master分区。

转载于:https://www.cnblogs.com/caozhangni/p/5051920.html

MemSQL分布式架构介绍(二)相关推荐

  1. MemSQL分布式架构介绍

    1.Aggregators(汇聚器) MemSQL集群的一种节点,为访问MemSQL集群的网关,一个集群中可以有多个汇聚器,汇聚器主要负责向叶子节点发送DML请求.汇聚操作结果并返回给客户端 2.Ma ...

  2. 【秒杀购物商城业务服务】「分布式架构服务」盘点中间件服务的高可用模式及集群技术的方案分析

    秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置) ...

  3. 「秒杀购物商城业务服务」「分布式架构服务」盘点中间件服务

    ​ 秒杀购物商城业务服务-分布式架构介绍 基于MySQL数据库集群技术实现服务的高可用 基于Tomcat的集群负载机制实现Tomcat服务器的高可用 基于Nginx负载均衡机制实现负载均衡(介绍和配置 ...

  4. 后端总结(分布式架构设计)

    分布式架构设计 分布式理论与分布式架构设计理论 1. 分布式架构介绍 2.分布式理论 2.1 数据一致性 2.2 CAP定理 3.分布式一致性协议 4.分布式系统设计策略 5. 分布式架构服务调用 5 ...

  5. 昆仑分布式数据库架构介绍

    一.前言 昆仑分布式数据库集群(下文简称昆仑数据库)是一个分布式关系数据库管理系统,面向TB和PB级别海量数据处理,以高吞吐量和低延时处理海量数据高并发读写请求. 它提供健壮的事务ACID保障,高效易 ...

  6. 【从单体架构到分布式架构】(二)请求增多,单点变集群(1):负载均衡

    这是我的第 47 篇原创文章作者 l 会点代码的大叔(CodeDaShu) 上一个章节,我们搭建了一个最简单的单体服务项目,单体架构就是把所有的功能都放在一个工程项目中. 但是当访问量不断增加,我们只 ...

  7. .NET 分布式架构开发实战之二 草稿设计

    前言: 本篇之所以称为草稿设计,是因为设计的都是在纸上完成的.反映了一个思考的过程. 本篇的议题如下: 1) 第一个数据层草图的提出 2) 对数据访问层的思考 3) 第二个数据层草图的提出 1.数据层 ...

  8. 分布式架构及微服务介绍

    分布式架构 优点:耦合度低, 便于扩展 缺点:架构复杂,运维成本大 微服务治治理 异步通信技术 缓存技术 搜索技术 devops 微服务 微服务是分布式架构一种较好的实践,常见的微服务技术是sprin ...

  9. 分布式架构相关概念介绍

    集群 不同的人做同一件事情的同一部分为了同一个目的,如同一个公司的两个java程序员就是集群,如相同的代码部署到不同服务器就是集群. 负载均衡 负载均衡对应的就是集群,协调集群中单个服务器的处理量,例 ...

最新文章

  1. nerdctl命令tab键补齐方法
  2. Java静态变量与静态方法与成员变量成员方法的区别
  3. 首次安装Revit失败
  4. 【IDEA】2020 断点(BreakPoints)调试(亲测)
  5. Qt知识点汇总——来自网络
  6. python爬去百度图片_python实现爬取百度图片的方法示例
  7. Python操作excel(.xlsx)封装类MyPyExcel V2.0
  8. elasticsearch根据某个字段来查询,以及通过时间筛选
  9. docker 随笔记录
  10. apf svg matlab,【涨知识】APF和SVG的区别与联系
  11. python123蟒蛇代码_[蟒蛇菜谱] Python封装shell命令
  12. MySQL Merge存储引擎
  13. 秋招面经(Java开发)
  14. 输入法应提供不同工作下的字词频率模式
  15. [转贴]Unix-Center.Net需要您的帮助
  16. 菜鸟的IT道路ing (六)
  17. 明晰监管范围保护信息安全
  18. 国家以及省-市-区三级联动的js数组
  19. 大数据薪水大概多少_大数据就业岗位有哪些?薪资多少?
  20. 【Cesium入门】四、相机系统

热门文章

  1. 怎么配置宝塔linux环境,宝塔面板linux怎么安装
  2. 图像局部特征(二)--Harris角点检测子
  3. 2018-CBAM论文讲解
  4. 分数混合运算简便方法_分数混合运算和简便运算
  5. QT_TableWidget插入checkbox
  6. Windows核心编程_调用控制台窗口
  7. HDU 2256Problem of Precision(矩阵快速幂)
  8. ​ [RHEL7.1]重新封装系统(制作模板)
  9. EXCEL 2010学习笔记—— 动态图表
  10. 在android 两个类之间 get,set方法传参使用