数据分布

1、MySQL Cluster自动分区数据表(也可能使用用户自定义分区),将数据分布到分区中;

2、一个数据表被划分到多个Data Node分区中,数据在分区中被”striped”;

3、主键的 hashing 决定哪个分区拥有数据(自动分布);

4、对主键的一部分进行hashing也是可能的(适合sharding和数据局部性);

分区和数据分布

1、如果有两个数据节点(DATA NODE 1和DATA NODE 2),每个数据表都被分到两个分区中。

2、subid是主键,对主键subid进行的hashing决定分区。当然对主键的一分部分(part of PK)进行hashing也是可能的。

  • -奇数主键(绿色部分)
  • -偶数主键(红色部分)

副本(Replicas)

1、为了提供冗余和快速故障转移,分区之间是同步复制的;

2、最常用的是用两个副本(两份数据):

  • - 使用1个,2个,3个,4个副本也都是可能的
  • - NoOfReplicas=2

3、分区间的同步复制是从主分区(PRIMARY)到辅助分区(SECONDARY)

  • - 当有一个变更(下图实体圆心表示变更)发生在P0的时候,它将同步复制到S0
  • - 这个变更在事务commit的时候被持久化
  • - P0或S0将被更新,或什么都不做

数据分布 – 磁盘日志记录(disk logging)

1、数据在commit之后会在主内存中(main memory)

(1).但是改变(changes)是REDO日志记录的(REDO LOGGED),而REDO日志是每N毫秒(推荐1000ms)刷新到磁盘

由TimeBetweenGlobalCheckpoints参数控制
  类似innodb-flush-log-at-trx_commit=2

(2).数据同时被checkpoint到磁盘

2、磁盘日志记录使得恢复一个完全失败的cluster成为可能

节点组(Node groups)

1、共享同样数据的节点属于同一个节点组

2、一个节点组包含节点数等于副本数。(下图使用NoOfReplicas=2)

3、两个副本-四个数据节点

(1).四个数据节点-四个分区-两个副本

(2).四个节点和两个副本–>两个节点组

- 节点组数目 = 总节点数 / 副本数

4、三个副本-三个数据节点

(1).三个数据节点-三个分区

- 更多的副本,“写”更慢

(2).三个节点和三个副本–>一个节点组(这种方式不常用)

- 两个副本是惯例

5、副本使用建议

(1).推荐使用两个副本- 性能和可用性是最好的折衷

(2).三个或四个副本写比较慢,使用这种方式部署相对更少

(3).“写”成本

- 1个副本(没冗余): cost X

- 2个副本: cost 2X

- 三个副本: cost 3X

验证数据分布

用法:

ndb_desc -c connect_string tbl_name -d db_name [-p]

mysql> select * from ndbtest.tbl;
+---+
| a |
+---+
| 3 |
| 6 |
| 5 |
| 1 |
| 2 |
| 4 |
+---+
6 rows in set (0.01 sec) mysql>

参考:

http://www.zrwm.com/?p=3210

MySQL Cluster 数据分布(分区、分组)的更多相关文章

  1. MySQL Cluster配置概述

    一.     MySQL Cluster概述 MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而 ...

  2. MySQL的表分区详解

    这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...

  3. MySQL的表分区(转载)

    MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...

  4. mysql数据库表分区详解(数量过大的数据库表通过分区提高查询速度)

    这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...

  5. mysql中的分区

    第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...

  6. MySQL Cluster 与 MongoDB 复制群集分片设计及原理

    分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...

  7. mysql集群 MySQL Cluster

    <?php /* 郑重说明2015年6月11日16:28:14,目前为止MySQL Cluster 社区版不支持INNODB,商业版支持,但是授权价格20W左右,so看此文档之前,考虑下钱 My ...

  8. [置顶] MySQL Cluster初步学习资料整理--安装部署新特性性能测试等

    1.1 mysql-cluster简介 简单的说,MySQLCluster实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDBCluster(简称NDB)存储引擎来实现. ...

  9. MySQL Cluster

    MySQL Cluster MySQL集群一个非共享(shared nothing).分布式.分区系统,使用同步复制机制提供高可用和高性能. MySQL集群使用的是NDB引擎.NDB存储引擎会在节点间 ...

随机推荐

  1. 一个"如何使用示波器安全测试接市电电路板"的问题

    最近犯了一个错误测试操作: 测试场景:直接从市电插座取电接入3W非隔离开关电源电路板,使用示波器测试输出电压,此时示波器通过另外一个插座直接从市电取电 测试后果:在将示波器接到输出负极的一瞬间,漏电保 ...

  2. 在MySQL中出现Unknown column 'abc' in 'field list'怎么解决?

    update TABLE1 set NAME = '?' where  ID  ='?' 参数字段需要添引号.

  3. 分布式监控系统Zabbix-3.0.3-完整安装记录(2)-添加mysql监控

    Zabbix3.0 Server以后就自带了MySQL插件来监控mysql数据库的模板,只需要配置好agent客户端,然后在web端给主机增加模板就行了. 以下是公司线上的zabbix3.0环境下添加 ...

  4. codevs 2928 你缺什么

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 继"你幸福吗"之后,央视又推出了"你缺什么 ...

  5. 写Java也得了解CPU--伪共享

    第一次接触伪共享的概念,是在马丁的博客上:而ifeve也把这一系列博文翻译整理好了.概读了几次,感觉到此概念的重要.因此有了这个系列的第二篇读后总结. 1. 什么是伪共享(False sharing) ...

  6. 详解CSS中:nth-child的用法

    前端的哥们想必都接触过css中一个神奇的玩意,可以轻松选取你想要的标签并给与修改添加样式,是不是很给力,它就是“:nth-child”. 下面我将用几个典型的实例来给大家讲解:nth-child的实际 ...

  7. 微信快速开发框架(八)-- V2.3--增加语音识别及网页获取用户信息,代码已更新至Github

    不知不觉,版本以每周更新一次的脚步进行着,接下来应该是重构我的代码及框架的结构,有朋友反应代码有点乱,确实如此,当时写的时候只是按照订阅号来写的,后来才慢慢增加到支持API接口.目前还在开发第三方微信 ...

  8. Microsoft.VisualStudio.TestTools.UnitTesting 命名空间

      类 说明 AfterAssemblyCleanupEventArgs 为 AfterAssemblyCleanup 事件提供数据. AfterAssemblyInitializeEventArgs ...

  9. SQLite剖析之数据类型

    许多SQL数据库引擎(除SQLite之外的各种SQL数据库引擎)使用静态.严格的数据类型.对于静态类型,一个值的数据类型由它的容器,即存储这个值的列来决定.SQLite则使用更加通用的动态类型系统.在 ...

  10. JavaScript错误之:Uncaught ReferenceError: $ is not defined

    在js开发中,很多人遇到类似问题,都找不到解决方法.Uncaught ReferenceError: $ is not defined,在这里给大家提供几个解决方法. 方法/步骤11.出现这个错误,最 ...