mysql00 2015-11-04
MySQLCluster和RAC实现比较
经常免不了拿MySQLCluster(以下简称MySQL)和ORAClE(RAC)来对比。
MySQL使用了sharednothing的架构,而RAC使用的是sharedeverything的架构.
先看读一个数据块的处理,在RAC中当数据块在本地的cache中,可以直接
操作,如果在远端的话,需要请求远端的实例发送到本地来,然后再进行操作.如果
本块和远端都没有则请求一个读磁盘块的操作.RAC通缓存融合把整个集群的cahce看
做是一个大cache
MySQL读一个块,因为数据是同步复制的,直接在本地就有整个数据所有复本,这样
直接读取就可以了。如果是写操作的话,那么就需要在所有节点上进行写操作,整个过程是通过
两阶段事务提交协议来实现的。可以看出当在一个节点上写操作时,需要在其他节点上
全部写入,本地事务才能提交,这样当一个节点写入慢了,整个事务响应都比较慢,
而且整个集群在写密集操作时,写入次数非常大,比如在一个节点上写一个块,那么整个
集群的写次数totalwrites=nodenumbers*writes.从这个公式可以看出,随着节点数增
加,写性能急剧下降.
看RAC的写操作,如果数据块在本地,那么直接写操作就可以了,因为是sharedeverything
的架构整个数据只要写一份就可以.
有说MySQL有自动对数据进行分片的功能,那么整个集群看起来就像一个RAID0,可靠性
极低.另外对于一些操作,需要扫描所有的数据节点,那么这样的操作性能也会非常
非常低。
在不考虑很强的数据一致性的前提下,个人认为MySQLCluster对只读应用比较合适.