数据分布
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>
参考:
MySQL Cluster 数据分布(分区、分组)的更多相关文章
-
MySQL Cluster配置概述
一. MySQL Cluster概述 MySQL Cluster 是一种技术,该技术允许在无共享的系统中部署“内存中”数据库的 Cluster .通过无共享体系结构,系统能够使用廉价的硬件,而 ...
-
MySQL的表分区详解
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
-
MySQL的表分区(转载)
MySQL的表分区(转载) 一.什么是表分区 通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysql5.1开始支持数据表分区了. 如:某用户表的记录超过了600万条,那么就可以根据入库日期将表 ...
-
mysql数据库表分区详解(数量过大的数据库表通过分区提高查询速度)
这篇文章主要介绍了MySQL的表分区,例如什么是表分区.为什么要对表进行分区.表分区的4种类型详解等,需要的朋友可以参考下 一.什么是表分区通俗地讲表分区是将一大表,根据条件分割成若干个小表.mysq ...
-
mysql中的分区
第18章:分区 目录 18.1. MySQL中的分区概述 18.2. 分区类型 18.2.1. RANGE分区 18.2.2. LIST分区 18.2.3. HASH分区 18.2.4. KEY分区 ...
-
MySQL Cluster 与 MongoDB 复制群集分片设计及原理
分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...
-
mysql集群 MySQL Cluster
<?php /* 郑重说明2015年6月11日16:28:14,目前为止MySQL Cluster 社区版不支持INNODB,商业版支持,但是授权价格20W左右,so看此文档之前,考虑下钱 My ...
-
[置顶] MySQL Cluster初步学习资料整理--安装部署新特性性能测试等
1.1 mysql-cluster简介 简单的说,MySQLCluster实际上是在无共享存储设备的情况下实现的一种完全分布式数据库系统,其主要通过NDBCluster(简称NDB)存储引擎来实现. ...
-
MySQL Cluster
MySQL Cluster MySQL集群一个非共享(shared nothing).分布式.分区系统,使用同步复制机制提供高可用和高性能. MySQL集群使用的是NDB引擎.NDB存储引擎会在节点间 ...
随机推荐
-
Web前端优化最佳实践及工具集锦
Web前端优化最佳实践及工具集锦 发表于2013-09-23 19:47| 21315次阅读| 来源Googe & Yahoo| 118 条评论| 作者王果 编译 Web优化Google雅虎P ...
-
北京VR视频外包团队:全景VR视频科普
近期很多用户资讯问关于全景视频,这里动点给大家介绍一下: 首先,全景360VR视频(全景视频使用VR设备控制)是一种特殊的视频形式,与普通视频的最大区别就是,全景视频的每一帧都是涵盖360度空间场景信 ...
-
比较两个Long对象值
比较两个Long对象的值是否相等,不可以使用双等号进行比较,(long int Integer可以用双等号进行比较)可以采用如下方式: 1.使用equals方法进行比较 Long a=new Long ...
-
外表cms,内在wiki的系统anwiki
比较完整面向对象的语法格式, 外表cms,内在wiki的系统 http://enanocms.org/features 比较老,php4的语法
-
手动配置Ubuntu Linux系列3-缺省网关和主机名
上一篇讲到[原创]手动配置Ubuntu Linux的DHCP客户端,这里再说一下配置静态IP地址的方法. 仍然是编辑 interfaces文件. $ sudo vi /etc/network/ ...
-
iOS 并行编程:Thread
1 创建线程 1.1 NSThread 使用 NSThread 来创建线程有两个可以使用的方法: 1) 使用 detachNewThreadSelector:toTarget:withOb ...
-
selenium 学习笔记 ---新手学习记录(5) 问题总结(java)
1.今天遇到个奇葩问题,iframe有两个id相同的(如下图) 使用driver.switchTo().frame(“frmLinkPage1”);这个无法使用了. 后来改用driver.switch ...
-
vuex状态持久化
npm install vuex-persistedstate 在store.js里 import createPersistedState from 'vuex-persistedstate' co ...
-
《精通Python设计模式》学习行为型之责任链模式
感觉是全新的学习了. 因为在以前的工作中,并没有有意识的去运用哪一种编程模式. 以后要注意的了. 这才是高手之路呀~ class Event: def __init__(self, name): se ...
-
SQL 触发器的缺点 坏处 弊端 哼╭(╯^╰)╮
(自己总结,有误请不吝赐教) 1.如果触发频率高,占用内存,降低数据访问速度 2.相对不灵活,一旦触发马上执行,不能排除特殊情况 3.一定程度上打乱代码结构,相关的代码都需要特别注释,否则造成阅读和维 ...