NoSQL的一些关键问题

作者: ysq 分类: 服务端开发 发布时间: 2016-05-10 16:45 ė261 views 6没有评论

分布式系统的三个特性(CAP):

一致性(Consistency):在分布式系统中的所有数据备份,在同一时刻是否同样的值。

可用性(Availability):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。

分区容忍性/可靠性(Partition tolerance):集群中的某些节点在无法联系后,集群整体是否还能继续进行服务。

定律:任何分布式系统只可同时满足二点,没法三者兼顾。

 

数据分片:

就是把不同的数据分别放到不同的节点上,一般常使用两种方式:hash分片和范围分片

hash分片:

范围分片:bigtable

数据的可用性:

数据可靠性:

1.单机可靠性, 即写操作不会由于机器重启或者断电而丢失。

a控制fsync的调用频率

b使用日志型的数据结构, 会把写操作顺序的写入到一个日志文件中。 这个日志文件记录了操作行为,可以用于在出现故障后恢复丢失那段时间的数据,这样就把随机写变成顺序写了。

c通过合并写操作提高吞吐性能,数据先暂存在内存中,这样也方便对数据进行排序等操作,数据量到达一定量级后(如hdfs2.x 的128M),批量写入,可以提升写入效率

2.多节点间,主从同步。

如Redis采用了传统的主从数据同步的方式。所有在master上执行的操作,都会通过类似于操作日志的结构顺序地传递给slave上再执行一遍。如果 master发生宕机等事故,slave可以继续执行完master传来的操作日志并且成为新的master。可能这中间会导致一些数据丢失,因为 master同步操作到slave是非阻塞的,master并不知道操作是否已经同步线slave了。

 

数据一致性:

强一致性:HBase(借用底层HDFS)来实现强一致性(写所有节点成功才成功,读任意节点)

最终一致性:每对数据进行更改,就加一次版本号(类似于svn的版本管理),如(NA,NB,NC)在a节点(39,2,5)

b节点(38,1,5)每项数据的版本号都小于或等于a,直接更新数据即可,c节点(39,1,6)中有的数据比b旧,有的数据比较新这时就要解决冲突

 

参考资料:

1.  500or less卷1:第13章 NoSQL生态系统 http://www.ituring.com.cn/article/4002

 

本文出自 杨书清的博客,转载时请注明出处及相应链接。

本文永久链接: http://blog.yangshuqing.com/code/serverdev/346.html

发表评论

Ɣ回顶部