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就涉及节点较
多,但热点均匀,方便管理。反之,热点不均,会大致机器效率发挥不完全。
- 《NoSQL入门》关于NoSQL
- Nosql入门
- NoSQL入门
- Nosql入门知识
- NoSQL入门文章推荐
- MongoDB(NoSQL) 入门
- Nosql入门知识
- NoSQL数据库入门
- [NOSQL] Memcache入门
- MongoDB(NoSQL) 入门
- NoSQL入门学习
- MongoDB(NoSQL) 入门
- NoSql入门和概述
- NoSql入门和概述
- NoSQL数据库入门
- NoSQL数据库入门概述
- NoSql入门和概述
- NoSQL入门概述
- Linux系统信息查看命令大全
- 每天进步一点点-->C语言文件操作函数
- lua面向对象编程之点号与冒号的差异详细比较
- SELECT 失败,因为下列 SET 选项的设置不正确: 'ARITHABORT'。
- 《如何学好游戏编程》
- Nosql入门
- 无法在Web服务器上启动调试。调试器无法连接到远程计算机。原因可能是远程计算机不存在或防火墙阻止与远程计算机通信。
- 编写高效的Android代码 .
- ActiveX 控件“Microsoft Chart Control 6.0(sp4)(OLEDB)"不能例示,因为它需要一个设计时间许可
- You could try using --skip-broken to work around the problem
- 雷锋读图:移动互联网时代 “移动优先”才是王道
- 国内用户体验较好网站
- Xcode4.2中将Three20开源库导入到工程项目中
- bat按任意键开始结束的脚本