MS系列:Mysql、Mycat

一致性哈希分片

什么是一致性哈希
http://www.zsythink.net/archives/1182
一致性哈希的扩容
https://blog.csdn.net/ydyang1126/article/details/70773557?locationNum=11&fps=1

慢日志

http://www.zsythink.net/archives/1260

读快照–可重复读

导出大批量数据-如何保证数据一致性
http://www.zsythink.net/archives/1436

GTID

MySQL5.6 以后,提供了基于 GTID 多开启多线程同步复制的方案,即每个库有一个单独的(sql thread)。
进行同步复制,这将大大改善 MySQL 主从同步的数据延迟问题,配合 Mycat 分片,可以更好的将一个超级大表的数据同步的时延降低到最低。此外,用 GTID 避免了在传送 binlog 逻辑上依赖文件名和物理偏移量,能够更好的支持自动容灾切换,对运维人员来说应该是一件令人高兴的事情,因为传统的方式里,你需要找到 binlog和 POS 点,然后 change master to 指向,而不是很有经验的运维,往往会将其找错,造成主从同步复制报错,在 mysql5.6 里,无须再知道 binlog 和 POS 点,需要知道 master 的 IP、端口,账号密码即可,因为同步复制是自动的,mysql 通过内部机制 GTID 自动找点同步。
即使是并发复制机制、仍然无法避免主从数据库的数据瞬间不同步的问题,因此又有了一种增强的方案,即galera for mysql、percona-cluster 或者 mariadb cluster 等集群机制,他们是一种多主同步复制的模式,可以在任意节点上进行读写、自动控制成员,自动删除故障节点、自动加入节点、真正给予行级别的并发复制等强大能力!
关于GDIT,可参考:https://yq.aliyun.com/articles/57731

MyCat的使用瓶颈

https://blog.csdn.net/u013235478/article/details/53178657
1. 当分片数量比较多时对非分片字段查询性能低
2. 分页排序性能低
3. 除非E-R分片,否则join查询性能低
4. XA事务:mysql设置了自动提交时,mycat不能回滚已提交的数据库;mysql设置不自动提交时,mycat等待事务超时时进行回滚。

MyCat高可用

Keepalived+HAproxy+Mycat 集群+MySQL 主从

MySql高可用方案对比

https://blog.csdn.net/slwang001/article/details/71080002
https://blog.csdn.net/u013399093/article/details/70597712
https://www.2cto.com/database/201504/387166.html
MySQL MGR与Galera性能测试
https://blog.csdn.net/chenhaifeng2016/article/details/77530569
高一致分布式数据库Galera Cluster
http://geek.csdn.net/news/detail/159228
注:关于mysql高可用,mycat权威指南高级篇里面也有详细论述

Galera:

优点:
(1).同步复制 Synchronous replication
(2).Active-active multi-master 拓扑逻辑
(3).可对集群中任一节点进行数据读写
(4).自动成员控制,故障节点自动从集群中移除
(5).自动节点加入
(6).真正并行的复制,基于行级
(7).直接客户端连接,原生的 MySQL 接口
(8).每个节点都包含完整的数据副本
(9).多台数据库中数据同步由 wsrep 接口实现

缺点:
(1).目前的复制仅仅支持InnoDB存储引擎,任何写入其他引擎的表,包括mysql.*表将不会复制,但是DDL语句会被复制的,因此创建用户将会被复制,但是insert into mysql.user…将不会被复制的.
(2).DELETE操作不支持没有主键的表,没有主键的表在不同的节点顺序将不同,如果执行SELECT…LIMIT… 将出现不同的结果集.
(3).在多主环境下LOCK/UNLOCK TABLES不支持,以及锁函数GET_LOCK(), RELEASE_LOCK()…
(4).查询日志不能保存在表中。如果开启查询日志,只能保存到文件中。
(5).允许最大的事务大小由wsrep_max_ws_rows和wsrep_max_ws_size定义。任何大型操作将被拒绝。如大型的LOAD DATA操作。
(6).由于集群是乐观的并发控制,事务commit可能在该阶段中止。如果有两个事务向在集群中不同的节点向同一行写入并提交,失败的节点将中止。对 于集群级别的中止,集群返回死锁错误代码(Error: 1213 SQLSTATE: 40001 (ER_LOCK_DEADLOCK)).
(7).XA事务不支持,由于在提交上可能回滚。
(8).整个集群的写入吞吐量是由最弱的节点限制,如果有一个节点变得缓慢,那么整个集群将是缓慢的。为了稳定的高性能要求,所有的节点应使用统一的硬件。
(9).集群节点建议最少3个。
(10).如果DDL语句有问题将破坏集群。

找出每个班级分数最高的3个学生

select * from student s1 left join class c on s1.class_id=c.id 
where ( 
    select count(1) from student s2 where s2.class_id=s1.class_id and s2.score>=s1.score
) <=3;

猜你喜欢

转载自blog.csdn.net/qq_26182553/article/details/80005147