找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[ Nosql与大数据 ] 【守望者 NOSQL】NOSQL关键技术分析

2014-10-11 17:19| 发布者: watchmen | 查看: 958 | 收藏

摘要: CAP理论指出:一个分布式系统不可能同时满足一致性(Consistency),可用性(Availibility)和分区容忍性(Partition Tolerance)这三个需求。因此在设计一个分布式存储系统时,不得不在三个特性中选择放弃一个。如 ...
CAP

CAP理论指出:一个分布式系统不可能同时满足一致性(Consistency),可用性(Availibility)和分区容忍性(Partition Tolerance)这三个需求。因此在设计一个分布式存储系统时,不得不在三个特性中选择放弃一个。如果关注一致性,那么就需要处理因为系统不可用而导致的写操作失败的情况,而如果关注的是可用性,那么应该知道系统的read操作可能不能精确的读取到write操作写入的最新。
 
图 CAP理论

一致性(Consistency):对于分布式的存储系统,一个数据往往会存在多份。简单的说,一致性会让客户对数据的修改操作(增/删/改)要么在所有的数据副本(在英文文献中常称为Replica)全部成功,要么全部失败。即,修改操作对于一份数据的所有副本而言,是原子(Atomic)的操作。如果一个存储系统可以保证一致性,那么则客户读写的数据完全可以保证是最新的。不会发生两个不同的客户端在不同的存储结点中读取到不同副本的情况。

可用性(Availability):可用性很简单,顾名思义,就是指在客户端想要访问数据的时候,可以得到响应。但是注意,系统可用(Available)并不代表存储系统所有结点提供的数据是一致的。比如客户端想要读取文章评论,存储系统可以返回客户端数据,但是评论缺少最新的一条。这种情况,仍然说系统是可用的。往往会对不同的应用设定一个最长响应时间,超过这个响应时间的服务仍然称之为不可用的。

分区容忍性(PartitionTolerance):如果存储系统只运行在一个结点上,要么系统整个崩溃,要么全部运行良好。一旦针对同一服务的存储系统分布到了多个结点后,整个存储系统就存在分区的可能性。比如,两个存储结点之间联通的网络断开(无论长时间或者短暂的),就形成了分区。对当前的互联网公司(例如Google)来说,为了提高服务质量,同一份数据放置在不同城市乃至不同国家是非常正常的。因此结点之间形成分区也很正常。
Gilbert 和Lynch将分区容忍性定义如下:No set of failures less thantotal network failure is allowed to cause the system to respond incorrectly,即除全部网络结点全部故障以外,所有子结点集合的故障都不允许导致整个系统不正确响应。也就是说,Operations will complete, even if individual components areunavailable.即使部分的组件不可用,施加的操作也可以完成。
如果选择PartitionTolerance和Consistency,那么即使坏了结点,操作必须又一致,又能顺利完成。所以就必须100%保证所有结点之间有很好的连通性。这是很难做到的。最好的办法就是将所有数据放到同一个结点中。但是显然这种设计是不满足Availability的[21]。
如果要满足Availability和Consistency,那么,为了保证可用,数据必须要有Replica。这样,系统显然无法容忍Partition。当同一数据的两个副本(Replica)分配到了两个无法通信的Partition上时,显然会返回错误的数据。
如果满足Availability和Partition Tolerance的情况。满足可用,就说明数据必须要在不同结点中有replica。然而还必须保证在产生Partition的时候仍然操作可以完成。那么,必然操作无法保证一致性。

关系数据库的ACID理论

在传统应用领域,例如银行系统。其数据库必须具备下列功能:
(1)安全存储合适的数据;
(2)快速检索合适的数据;
(3)支持多个并行的用户会话。
即必须满足ACID理论;ACID 是 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)和 Durability(持久性)。

(1)原子性:指数据库操作可以组合到一起,当作单个单元处理。
(2)一致性:保证此单个单元(或事务)中的所有操作要么都成功执行,要么都不执行。
(3)隔离性:指独立的数据库事务集合以不相互冲突的方式执行。
(4)持久性:保证数据库是安全的,不会异常终止。
(5)关系数据库的ACID模型拥有高一致性和可用性很难进行分区:
基于ACID的关系型数据库选择的是C和P。因此能够提供很高的一致性,但是却在系统繁忙的时候不可用(Service  Unavailable)。但是对于大多数互联网应用来讲,强一致性对他们来说并不一定非要满足,可用性往往是更加重要的。例如,博客网站在北京和上海的存储服务器突然不联通,北京用户和上海用户无法看到对方的评论显然要比北京用户和上海用户访问网站都返回HTTP 500错误要好的多。当然,对于银行这种业务来讲,一致性是不能放弃的.

KEYVALUE的BASE理论

KEYVALUE的BASE理论的关键信息如下所述:
(1)Basically Available基本可用原理:即支持分区失败(例如sharding碎片划分数据库);
(2)Soft state软状态原理:即状态信息可以在一段时间不同步,异步;
(3)Eventually consistent最终一致原理:即最终的数据内容是一致即可,而不是高一致性。

KeyValue相对于关系型数据库的优点

KeyValue相对于关系型数据库具有以下优点:
(1)可扩展性:无论是横向还是纵向扩展:而关系型数据库通常只能部署在一台服务器上,随着数据量的增加只能通过增加处理器、内存容量和硬盘容量来升级系统。而部署在多台大型服务器上的关系型数据库只能通过互相复制数据来保持数据的一致性。而KeyValue数据库可以部署在单服务器上,可以方便的横向和纵向扩展,可以部署是成云状分布;
(2)把持列式存储、key/value数据对存储,数组(Tuples)单元存储方案:关系型数据库在内部病上是由表或视图来管理数据,其中存储相应字段 (即是固定的数据结构,然后使用各种操作进行相互互联)。KeyValue数据库通常存储的是一对键值或数组(Tuples),其结构不固定,仅仅是有顺序的数据序列;
(3)内存和硬盘并用:关系型数据库通常是存储在硬盘内,或者是通过网络方式存储。SOL查询语句或存储操作再将数据读取到内存空间里进行处理。KeyValue数据库可以直接在硬盘上操作,同时使用内存来加快访问的速率.


KeyValue的不足及发展趋势
由于现有KEYVALUE技术处于前期开发阶段,主要体现以下不足:
(1)缺乏支持
现在主流的数据库都是关系型数据库,所以相应的关系型数据库的服务商较多,而相对而言KeyValue数据库的大部分项目是开源的,服务商比较少,所以如果使用KeyValue数据库开发项目的话,一旦出现问题,自己解决不了,也没有好的服务商帮解决问题,那么到时候问题就比较麻烦。
(2)成熟度不够
KeyValue数据库虽然很早就出现在很多地方,但是随着Web2.0的出现才逐渐发展起来,在web2.0时代,关系型数据库现在已经遇到了很多问题。KeyValue没有在很大范围使用起来,所以相对来说还是存在很多不成熟的地方,跟关系型数据库比起来还是存在很多不足,但未来KeyValue数据库会发展得越来越好[24]。
(3)设计困难
KeyValue数据库的设计很难体现实际问题,关系型数据库很好的体现了实际问题的关系,由于KeyValue数据库对于关系的缺乏,所以在解决实际问题中,给设计和维护都带来了很大的不便.

会员评论  

已有0参与评论

推荐阅读

【守望者  j2se】ConcurrentHashMap原理分析
【守望者 j2se】ConcurrentHashMap原
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据
【守望者  j2se】双向链表模拟
【守望者 j2se】双向链表模拟
我们熟悉了java单向链表的模拟,现在我就必须开始双向链表的模拟的.1.基础结构
【守望者 高并发】现有高并发WEB服务器 lighttpd Apache Nginx比较
【守望者 高并发】现有高并发WEB服务器
lighttpd网络服务器基于的Lighttpd的网络服务器具有这样的特点:占用内存资源
【守望者 高并发】C10K/C500K与I/O框架
【守望者 高并发】C10K/C500K与I/O框架
C10K、C/500K问题C10K 的意思是10000并发请求,C500K意思是500 000并发请求,
【守望者  JMM】理解volatile内存语义
【守望者 JMM】理解volatile内存语义
理解volatile变量对写多线程程序还是很有帮助的,这样就会避免一上来就是syn这
【守望者  j2se】虚拟机各部分内存溢出情况
【守望者 j2se】虚拟机各部分内存溢出
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况:(1).java堆溢出:
【守望者 高并发】使用CAS实现高效并发处理
【守望者 高并发】使用CAS实现高效并发
守望者:在并发处理应用中,一般使用锁的方式来解决竞争问题,但锁的效率比较
【守望者 大数据】Mahout学习路线图
【守望者 大数据】Mahout学习路线图
Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Z
【守望者  j2se】吃透 java I/O 工作机制-1
【守望者 j2se】吃透 java I/O 工作机
I/O 问题可以说是当今互联网 Web 应用中所面临的主要问题之一,因为当前在这
【守望者 j2se】ConcurrentMap之putIfAbsent(key,value)用法讨论
【守望者 j2se】ConcurrentMap之putIfA
先看一段代码:public class Locale { private final static MapString, Lo
【守望者  javascript】判断IE浏览器世界上最短的代码
【守望者 javascript】判断IE浏览器世
最短的IE判定var ie=!-分析以前最短的IE判定借助于IE不支持垂直制表符的特性
【守望者 大数据】机器学习已成为大数据的基石
【守望者 大数据】机器学习已成为大数
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、
【守望者  j2se】多线程与并发知识点总结
【守望者 j2se】多线程与并发知识点总
对于多线程和并发编程这个比较大的技术模块,我们会整理一些帖子方便知识点的
【守望者  j2se】二叉树模拟
【守望者 j2se】二叉树模拟
接着我们就要写一个比较复杂的数据结构的,但是这个数据结构是很重要的,假如
【守望者 SRS  】SRS 源代码分析笔记(0.9.194)-分析服务器对端口的监听 ...
【守望者 SRS 】SRS 源代码分析笔记(
第一部分 分析服务器对端口的监听 端口监听与初始化(一)全局变量_srs_confi

行业聚焦  面试交流  职位推荐  开发视频   技术交流  腾讯微博  新浪微博

友情链接:课课家教育  阿里云  鲜果  W3Cfuns前端网  中国企业家  环球企业家  投资界  传媒梦工场  MSN中文网  Android开发者社区  cnbeta  投资中国网  又拍云存储  美通说传播  IT茶馆  网商在线  商业评论网  TechOrange  IT时代周刊  3W创新传媒  开源中国社区  二维工坊  Iconfans  推酷  智能电视网  FreeBuf黑客与极客  财经网  DoNews  凤凰财经  新财富  eoe移动开发者社区  i黑马  网易科技  新浪科技  搜狐IT  创业家  创业邦  腾讯财经  福布斯中文网  天下网商  TechWeb  雷锋网  新浪创业  和讯科技  品途O2O  极客公园  艾瑞网  抽屉新热榜  卖家网  人民网通信频道  拉勾网  创新派  简单云主机  

手机版|黑名单|守望者在线 在线教育 linux 高级程序设计 C/C++ 大数据 ( 蜀ICP备14029946号

成都守望者科技有限公司 © 2013-2016 All Rights Reserved