Next Generation Databases mostly addressing some of the points: being non-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,C的读取操作能读取到最新 值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,C读取到 最新值这一段时间。 ? 最终一致性 最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如 果在A,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就涉及节点较 多,但热点均匀,方便管理。反之,热点不均,会大致机器效率发挥不完全。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|