`
daniel_tu
  • 浏览: 185332 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

非关系型数据库NoSQL理论基础之CAP理论

 
阅读更多

本文作者: Sigma
本文链接: http://www.sigma.me/2011/06/13/NoSQL-CAP-Theorem.html

 

CAP理论是设计分布式web系统的一个很关键的定律,其主要内容是(非官方定义):

When designing distributed web services, there are three properties that are commonly desired: consistency, availability, and partition tolerance. It is impossible to achieve all three.

中译为:

在设计分布式Web服务中,通常需要考虑三个应用的属性:一致性、可用性以及分区宽容性。但是在实际的设计中,不可能这三方面同时做的很好。

CAP理论的C就是一致性(Consistency),这里不多解释,想了解的可以看看我之前写过的一致性的一些东西 ;A 就是可用性(availability),可以理解为是否可获取数据,以及获取数据的速度;P就是分区容忍度(partion tolerance),指的是系统中的数据分布性的大小对系统的正确性,性能的影响(一定程度上就是可扩展性)。这个理论的主要意思就是这三个是不可以同 时做到很好的,我们在实现一个分布式系统时(包括分布式数据库),是不可能同时完美的实现三个方面。其实这个理论可以用“鱼和熊掌不可兼得”一言以蔽之。

CAP理论最早是在2000年7月19号,由Berkeley的Eric Brewer 教授在ACM PODC会议上的一个开题演讲中提出,PPT在 。此后,MIT的Seth GilbertNancy Lynch理论上证明 了Brewer猜想是正确的,CAP理论在学术上正式作为一个定理出现了。

NoSQL 一定程度上就是基于这个理论提出来的,因为传统的SQL数据库(关系型数据库)都是都是具有ACID属性,对一致性要求很高,因此降低了 A(availability)和P(partion tolerance),因此,为了提高系统性能和可扩展性,必须牺牲C(consistency),推翻关系型数据库中ACID这一套。

依据CAP理论,从应用的需求不同,我们对数据库(其实就是一种结构化数据存储,和Bolb恰好不同)时,可以从三方面考虑:

  • 考虑CA,这就是传统上的关系型数据库(RMDB).
  • 考虑CP,主要是一些Key-value数据库,典型代表为google的Big Table
  • 考虑AP,主要是一些面向文档的适用于分布式系统的数据库,如SimpleDB。

而对大型网站尤其是SNS网站,对于数据的短期存储,可用性与分区容忍性优先级要高于数据一致性,一般会尽量朝着 A、P 的方向设计,而对于数据的持久存储,可以通过传统的SQL来保证一致性(最终一致性)。

CAP理论出现后,很多大规模的网站,尤其是SNS网站的数据库设计都利用其思想,包括Amazon,Facebook和Twitter这几个新兴的IT巨头,因此,一定程度上来讲,他们都是CAP的信徒。另一方面,他们从实践上证明了CAP理论的正确性。

最后,附上一张图片,可以形象的解释CAP理论(来源 )
CAP-NoSQL
更多内容,请看这篇介绍CAP理论的文章 ,本文有些内容译自这里。

分享到:
评论

相关推荐

    NoSQL非关系型数据库

    ### NoSQL非关系型数据库详解 #### NoSQL简介 NoSQL,意为“不仅仅是SQL”(Not only SQL),而非“不是SQL”(Not SQL)。它代表着一种新兴的数据库技术,旨在解决传统关系型数据库(RDBMS)所面临的挑战。随着...

    山东大学 软件学院 非关系型数据库ppt.zip

    非关系型数据库(NoSQL)是一种不同于传统的关系型数据库的数据存储模型。在信息化时代,随着大数据、云计算和互联网应用的快速发展,NoSQL数据库因其高可扩展性、高性能、灵活的数据模型等特点,逐渐受到广泛的关注...

    山东大学软件学院 非关系型数据库实验源代码

    非关系型数据库(NoSQL,Not Only SQL)是近年来在大数据处理、分布式系统等领域广泛应用的一种数据库类型。相较于传统的关系型数据库,NoSQL数据库在处理大量数据、高并发场景下具有更好的性能和可扩展性。本实验是...

    第19章 非关系型数据库—NoSQL.docx

    NoSQL 数据库的出现是为了弥补关系型数据库的不足之处,如大量数据的写入处理、对有数据更新的表做索引或表结构变更处理不利、字段不固定时应用存在缺陷等。 使用 NoSQL 数据库有以下五个方面的优势: 1. 灵活的可...

    非关系型数据库知识点背诵总结.docx

    非关系型数据库(NoSQL,Not Only SQL)是近年来在互联网行业中广泛应用的一种数据库技术,它主要解决了传统关系型数据库在处理大数据、高并发场景下的性能瓶颈。以下是对NoSQL数据库和相关理论的详细阐述。 首先,...

    非关系型数据库期末复习题.docx

    非关系型数据库,也称为NoSQL数据库,是近年来在大数据处理和互联网领域广泛应用的数据存储解决方案。与传统的关系型数据库相比,NoSQL数据库更注重水平扩展、高性能和高可用性,适用于处理大规模分布式环境下的海量...

    NoSQL数据库技术实战

    NoSQL(Not Only SQL)数据库是一种非关系型数据库,它打破了传统的关系型数据库模型,为处理大规模分布式数据提供了新的解决方案。在大数据时代,由于其高可扩展性、高性能和灵活的数据模型,NoSQL数据库被广泛应用...

    厦门大学-林子雨-大数据技术基础-第5章 NoSQL数据库-上机练习-关系数据库和NoSQL数据库操作实践

    文档数据库,如MongoDB,是一种非关系型数据库,它以JSON格式的文档存储数据,支持嵌套结构,提供更灵活的数据模型。学生将学习MongoDB的文档操作,包括创建数据库、创建集合(相当于关系数据库的表),以及插入和...

    nosql分布式数据库期末考试题.docx

    - **企业考勤数据管理**: 通常采用关系型数据库。 **15. HBase 技术借鉴** - **MapReduce**: 大数据处理框架,与 HBase 并无直接技术借鉴关系。 - **Chubby**: Google 的一个分布式锁服务,HBase 并未直接借鉴。 -...

    《NoSQL数据库原理与应用》课程教学大纲(正式版).pdf

    这门课程旨在深入探讨非关系型数据库(NoSQL)的基本原理、设计方法和技术,以应对大规模数据处理和高并发环境下的挑战。NoSQL数据库在web2.0和社交网络服务(SNS)中扮演了重要角色,因为它能有效解决传统关系...

    NOSQL 数据库

    CAP理论由Eric Brewer教授提出,它是NoSQL数据库设计的重要理论基础之一。CAP理论指出,在分布式计算环境中,任何系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容忍性(Partition ...

    第10章 NoSQL数据库1

    NoSQL数据库是指非关系型的数据库,旨在解决关系数据库的缺陷,例如关系数据库并不适合所有的数据模型、关系数据库扩展难度大、标准化通常会伤害到性能等问题。NoSQL数据库的目标是反标准化、无模式、文档型存储,以...

    NoSQL数据库笔谈.pdf

    《NoSQL数据库笔谈》是一本深入探讨非关系型数据库技术的著作,作者颜开在2010年提出了对NoSQL数据库的见解和分析。本文主要围绕思想篇、手段篇、软件篇和应用篇四个部分展开,揭示了NoSQL数据库的核心概念、实现...

    NoSQL的技术研究

    NoSQL技术的研究旨在探讨非关系型数据库的原理、机制及其在现代互联网应用中的实践。NoSQL,Not Only SQL,这一概念强调的是在大数据量、高并发、分布式环境下的数据存储和处理需求,与传统的关系型数据库相比,...

    nosql专业版(英文版)

    NoSQL,全称"Not Only SQL",是一种非关系型数据库模型,它在大数据处理、分布式计算以及高并发场景下表现出色。NoSQL数据库的设计理念在于灵活性、可扩展性和高性能,与传统的SQL数据库形成鲜明对比。 NoSQL的专业...

    中国数据库技术大会NoSQL技术实践专场PPT资料.rar

    NoSQL(Not Only SQL)是一种非关系型数据库技术,它在大数据时代中逐渐崭露头角,成为处理海量数据和高并发场景的重要工具。在中国数据库技术大会上,NoSQL技术实践专场是一个聚焦这一领域的专业研讨会,提供了丰富...

    数据库技术沙龙ppt:NoSQL应用实践

    NoSQL(Not Only SQL)数据库是一种非关系型数据库管理系统,其设计初衷是为了处理大规模数据存储需求,特别是在大数据和实时Web应用中,NoSQL能够提供更好的可扩展性和灵活性。 #### NoSQL发展背景与动机 NoSQL...

Global site tag (gtag.js) - Google Analytics