Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2796863
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Mysql/postgreSQL

2014-12-26 20:14:17

                  MySQL Cluster和RAC实现比较

    经常免不了拿MySQL Cluster(以下简称MySQL)和ORAClE(RAC)来对比。
MySQL使用了shared nothing的架构,而RAC使用的是shared everything的架构.

    先看读一个数据块的处理,在RAC中当数据块在本地的cache中,可以直接
操作,如果在远端的话,需要请求远端的实例发送到本地来,然后再进行操作.如果
本块和远端都没有则请求一个读磁盘块的操作.RAC通缓存融合把整个集群的cahce看
做是一个大cache


   MySQL读一个块,因为数据是同步复制的,直接在本地就有整个数据所有复本,这样
直接读取就可以了。如果是写操作的话,那么就需要在所有节点上进行写操作,整个过程是通过
两阶段事务提交协议来实现的。可以看出当在一个节点上写操作时,需要在其他节点上
全部写入,本地事务才能提交,这样当一个节点写入慢了,整个事务响应都比较慢,
而且整个集群在写密集操作时,写入次数非常大,比如在一个节点上写一个块,那么整个
集群的写次数  total writes=node numbers*writes. 从这个公式可以看出,随着节点数增
加,写性能急剧下降.


  看RAC的写操作,如果数据块在本地,那么直接写操作就可以了,因为是shared everything
的架构整个数据只要写一份就可以.


  有说MySQL 有自动对数据进行分片的功能,那么整个集群看起来就像一个RAID0,可靠性
极低.另外对于一些操作,需要扫描所有的数据节点,那么这样的操作性能也会非常
非常低。


   在不考虑很强的数据一致性的前提下,个人认为MySQL Cluster对只读应用比较合适.

 

阅读(6105) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~