Nosql入门

来源:互联网 发布:八年级行知天下答案 编辑:程序博客网 时间:2024/05/22 06:29

Next Generation Databases mostly addressing some of the points: beingnon-relational, distributed, open-source and horizontally scalable

下一代的数据库着重于:非关系性、分布式、开源、水平可扩展

1、Nosql思想篇

   CAP,BASE和最终一致性是NoSQL数据库存在的三大基石。而五分钟法则是内存数据存储了理论依据。这个是一切的源头。

  1.1CAP

      C:Consistency 一致性
      A:Availability 可用性(指的是快速获取数据)
      P: Tolerance of networkPartition 分区容忍性(分布式)

          三者不可兼得,根据需求侧重选择数据库策略

作为架构师,一般有两个方向来利用CAP理论
1. key-value存储,如Amaze Dynamo等,可根据CAP三原则灵活选择不同倾向的数据库产品。
2. 领域模型 + 分布式缓存 + 存储 (Qi4j和NoSql运动),可根据CAP三原则结合自己项目定制灵
活的分布式方案,难度高。
我准备提供第三种方案:实现可以配置CAP的数据库,动态调配CAP。
• CA:传统关系数据库
• AP:key-value数据库

而对大型网站,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着 A、P 的方向设计
后通过其它手段保证对于一致性的商务需求
。架构设计师不要精力浪费在如何设计能满足三者的完美分
布式系统,而是应该进行取舍。

不同数据对于一致性的要求是不同的。举例来讲,用户评论对不一致是不敏感的,可以容忍相对较长时
间的不一致,这种不一致并不会影响交易和用户体验。而产品价格数据则是非常敏感的,通常不能容忍
超过10秒的价格不一致。

   1.2  一致性:

• 强一致性
强一致性(即时一致性) 假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读
取操作都将返回最新值
• 弱一致性
假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新
值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,B,C读取到
最新值这一段时间。
• 最终一致性
最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如
果在A,B,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取
到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以
下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为
master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,
当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看
到最新的值。

1.3 BASE

 说起来很有趣,BASE的英文意义是碱,而ACID是酸。真的是水火不容啊。
• Basically Availble --基本可用
• Soft-state --软状态/柔性事务
"Soft state" 可以理解为"无连接"的, 而 "Hard state" 是"面向连接"的
• Eventual Consistency --最终一致性
最终一致性, 也是是 ACID 的最终目的。
BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性: Basically
Available基本可用。支持分区失败(e.g. sharding碎片划分数据库) Soft state软状态 状态可以有一
段时间不同步,异步。 Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一
致。

BASE思想的主要实现有
1.按功能划分数据库
2.sharding碎片
BASE思想主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或
容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。0

 

此处学习一致性hash算法,不同的哈希算法可以导致数据分布的不同位置,如果十分均匀,那么一次MapReduce就涉及节点较
多,但热点均匀,方便管理。反之,热点不均,会大致机器效率发挥不完全。

原创粉丝点击