NoSQL 数据库架构
一、指令的低效使用
在进行 redis 程序使用的时候,我发现,单纯记住指令,效率实在太低了,尤其是在 linux 这样的操作系统之下,需要使用大量的指令。故而,我觉得,应该建立在机制之上,从指令更高的一层去理解,才能游刃有余地使用指令
二、NoSql
关系型数据库在分布式要求下,伸缩性不是那么好,为了解决分布式环境下数据要求,提供了 NoSql,也就是 Not Only Sql。
三、CAP 原理
关注分布式系统下,一致性、可用性、分区耐受性之间的关系。
一致性(Consistency,C),每次读取的数据都是最近写入的或者是错误的不存在的,不可能返回过期的数据,保证任意时刻数据都是同一个数据
可用性(Availability,A),每次请求都能够返回一个响应,而不是一个错误或者没有响应,但不保证数据的一致性。就是系统的正常运行的,不会出现崩溃。
分区耐受性(Partiton tolerance,P),网络原因,导致部分服务器节点之间消息丢失或者延迟,但是系统依然是可以操作的
简而言之,分布式系统环境,当网络分区失效时,无法同时保证一致性和可用性,只能二选一
四、CAP 原理与数据一致性冲突
基于一致性冲突,分布式系统之间的通信是关键,没有通信,无法保证整个系统的所有节点数据一致,所以,网络通信协议非常重要
解决方案:最终一致性
短时间出现不一致的情况,但随着变更异步扩散完成,最终数据是一致的,这就是最终一致性
方案一:最终一致写冲突
简单冲突处理策略:根据时间戳,最后写入覆盖
方案二:客户端冲突解决
客户端冲突解决,这里的客户端并不是用户终端,也就说,不是手机,不是 PC。这里的客户端指的业务处理系统,分布式系统下,有相同处理逻辑的不同节点,但最终一定会汇入到一个节点进行汇总,在这里实现数据的一致性操作
方案三:投票解决冲突(Cassandra)
知名 NoSql 数据库 Cassandra,采用投票解决方案。
五、NoSql 架构
Cassandra 架构
HBase 架构
HBase(Hadoop Database)的底层存储使用 Hadoop 分布式文件系统 HDFS,HFile 就是 Hadoop 的 HDFS,HBase 的文件存储通过 Hadoop 存储,数据的复制以及数据的文件系统高可用由 Hadoop 支撑,HBase 解决数据的分布式存储即可,分布式路由选择
HBase 数据存储的数据结构--Log Structed Merge Tree(LSM 数)
六、ACID 与 BASE
传统关系型数据库,基于 ACID,NoSql 数据库,基于 BASE
ACID
原子性(Atomicity): 事务要么全部完成,要么全部取消。 如果事务崩溃,状态回到事务之前(事务回滚)。
隔离性(Isolation): 如果 2 个事务 T1 和 T2 同时运行,事务 T1 和 T2 最终的结果是相同的,不管 T1 和 T2 谁先结束,隔离性主要依靠锁实现。
持久性(Durability): 一旦事务提交,不管发生什么(崩溃或者出错),数据要保存在数据库中。
一致性(Consistency): 只有合法的数据(依照关系约束和函数约束)才能写入数据库
BASE
基本可用(Basically Available)系统在出现不可预知故障时,允许损失部分可用性,如响应时间上的损失或功能上的损失。
Soft state(弱状态)软状态,指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
Eventually consistent(最终一致性)指系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态,因此最终一致性的本质是需要系统保证数据能够达到一致,而不需要实时保证系统数据的强一致性
评论