主页 > 新闻资讯 > 大数据学习:分布式环境下数据库的一致性

大数据学习:分布式环境下数据库的一致性

作者:张老师 浏览次数: 2021-06-30 17:13
在大数据技术生态,对于大规模的数据存储问题,主要依赖于分布式去解决。而分布式环境下的数据存储,就不免需要去解决一致性的问题。今天的大数据学习分享,我们就主要来讲讲分布式环境下数据库的一致性问题。

什么是一致性?

首先,数据库的一致性,从传统的关系型数据库讲,就是指在一个库中一次业务操作,无论涉及多少张表,多少行集,要么都失败,要么都成功,不能出现结果和预想的不一致,就是所谓的事务ACID特性中最重要的强一致性。

事务具有4个特征,分别是原子性、一致性、隔离性和持久性,简称事务的ACID特性;

1、原子性(atomicity)

一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作,这就是事务的原子性

2、一致性(consistency)

事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。

3、隔离性(isolation)

事务的隔离性是指在并发环境中,并发的事务相互隔离的,一个事务的执行不能不被其他事务干扰。

分布式环境下数据库的一致性特点

1、MySQL的分布式一致性

一个特别典型的例子就是MySQL的主从复制架构:异步,半同步,全同步。

异步:尽管主库保证了数据的强一致性,但是数据一旦写给binlog,主库就无视了从库的一致性,继续忙自己的事情,那么这个过程就是异步的,从库从binlog中拿到结果再重放保证与主库的一致性,我们把这个过程叫做最终一致性。

半同步:MySQL主库写入binlog后,至少集群中任意一个MySQL从库反馈主库,它同步成功了,那么主库就继续忙自己的事了,我们可以把这个过程称为弱一致性。

全同步:自然不用想了,MySQL主库写入binlog,集群其他节点都要重放后,报告同步成功了,主库才会忙其他事情,这就是分布式环境的强一致性了!

弱一致性是在强一致性和最终一致性中寻找一个平衡,至少有一个备份点是必须与主保持一致的,那么数据的可靠性是不是就提升了,同时性能上也不至于太差了。

2、NoSQL的分布式一致性

其次纠正一个错误的观点,NoSQL不能都视之为弱一致性。得具体看是哪个NoSQL框架,例如:MongoDB我们认为是NoSQL,它在副本集模式下,可以灵活地设置一致性规则,其中majority选项的意思是主库写入oplog后,大多数成员需要确认才行。

这个够挠头吧,怎么又来了个大多数,这岂不是在弱一致性和强一致性之间又出现了一种一致性模式,可实际就是这样。

大数据生态重点的一个NoSQL:HBase,它可的确是分布式环境下的强一致性,是不是颠覆了你对NoSQL的认知了!

因为HBase的是基于行级的事务,也就是说当一次写入记录的过程,一定是一个Region只分配一个Region Server写入,而且对于行级数据的操作要不写入成功,要不失败。如果一个节点挂了,恢复节点在没有恢复完数据之前就是不可用了。

HBase在CAP定理中保证了CP,舍弃了A:一致性C(HBase同一时间写入不同节点的数据必须一致),容错性P(即便有节点出错,系统还能正常运行),但是这个可靠性A就有问题(必须等待节点恢复完成,对请求就不能立刻有响应了)

大数据学习:分布式环境下数据库的一致性

最后再说说有些NoSQL的弱一致性为什么就可以被接受?

回顾一下最开始的MySQL的异步模式复制,它为什么是MySQL的默认复制模式?

若满足最终一致性,那么这类分布式系统选择了CAP定理中的AP,就是说为了保证系统内部无论是否出错,都会给客户响应。代价就是分布式各节点的数据副本有可能不一致,但这个问题不是此类系统业务最在乎的事情,往往系统的高性能,并能为客户端提供快速响应力才是关键目标,MySQL的默认主从复制如此,有些NoSQL亦如此。

关于大数据学习,分布式环境下数据库的一致性,以上就为大家做了简单的介绍了。在分布式环境下,一致性的问题还是需要根据具体的场景需求去选择解决方案,所以主流的分布式数据库一定要心中有数。成都加米谷大数据,专业大数据培训机构,大数据开发、数据分析与挖掘,零基础班本月正在招生中,课程大纲及试学视频可联系客服获取!
热点排行
推荐文章
立即申请>>