专栏首页Hadoop数据仓库云计算背后的秘密:NoSQL数据模型与CAP理论

云计算背后的秘密:NoSQL数据模型与CAP理论

数据模型

  传统的数据库数据模型方面,主要是关系型,它的特色是对Join类操作和ACID事务的支持。在NoSQL领域,主要有三种主流的数据模型

  Column-oriented(列式)

  列式也主要使用Table这样的模型,但是它并不支持类似Join这样多表的操作,它的主要特点是在存储数据时,主要围绕着“列(Column)”,而不是像传统的关系型数据库那样根据“行(Row)”进行存储,也就是说,属于同一列的数据会尽可能地存储在硬盘同一个页(Page)中,而不是将属于同一个行的数据存放在一起,这样做的好处是,对于很多类似数据仓库(Data Warehouse)的应用,虽然每次查询都会处理很多数据,但是每次所涉及的列并没有很多,这样如果使用列式数据库的话,将会节省大量I/O,并且大多数列式数据库都支持Column Family这个特性,通过这个特性能将多个Column并为一个小组,这样做好处是能将相似Column放在一起存储,这样能提高这些Column的存储和查询效率。总体而言,这种数据模型的优点是比较适合汇总(Aggregation)和数据仓库这类应用。.

  Key-value

  虽然Key-value这种模型和传统的关系型相比较简单,有点类似常见的HashTable,一个Key对应一个Value,但是其能提供非常快的查询速度、大的数据存放量和高并发操作,并非常适合通过主键对数据进行查询和修改等操作,虽然不支持复杂的操作,但是可以通过上层的开发来弥补这个缺陷。

  Document(文档)

  在结构上,Document和Key-value是非常相似的,也是一个Key对应一个Value,但是这个Value主要以JSON或者XML等格式的文档来进行存储,是有语义的,并且Document DB一般可以对Value来创建Secondary Index来方便上层的应用,而这点是普通Key-Value DB所无法支持的。

CAP理论

  这个理论是由美国著名科学家,同时也是著名互联网企业Inktomi的创始人Eric Brewer在2000年PODC(Symposium on Principles of Distributed Computing)大会上提出的,后来Seth Gilbert 和 Nancy lynch两人也证明了CAP理论的正确性,虽然在后来近十年的时间很多人对CAP理论提出了很多异议,但是在NoSQL的世界中,它还是非常有参考价值的。它的意思是,一个分布式系统不能同时满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。

  1. 一致性(Consistency):任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的;

  2. 可用性(Availability):每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的。

  3. 分区容忍性(Partition Tolerance): 在出现网络分区(比如断网)的情况下,分离的系统也能正常运行。

  由于一致性、可用性和分区容忍性这三方面只能选择两个,所以大多数NoSQL系统都会根据自己的设计理念来进行相应的选择,但由于许多NoSQL数据库都以水平扩展著称,所以在CAP的选择上面,都倾向于坚持分区容忍性,而放弃一致性或者可用性,它们的做法主要是通过消减关系型和事务相关的功能。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • linux shell配合密码字典破解远程mysql密码

    [cc lang="bash"] #!/bin/bash a=1 for t in `cat pass2` do mysql -u root -h “...

    葫芦
  • 一次INSERT查询的无逗号SQL注入漏洞构造利用($10k)

    本文分享的是作者在一次众测中的SQL报错型注入漏洞发现过程,有趣之处在于,在后续漏洞利用的构造中,如果在目标服务端数据库逻辑的INSERT查询中使用逗号(Com...

    FB客服
  • 使用模式构建:子集模式

    在多年前,第一代PC拥有高达256KB的RAM和两个5.25英寸的软盘驱动器。没有硬盘,因为在当时它们极为昂贵。这些限制导致在处理大量(对那时来说)数据时由于内...

    MongoDB中文社区
  • Windows下Apache应用环境塔建安全设置(目录权限设置)

    目的:为Apache,php配置受限制的用户权限。保护系统安全。需要的朋友可以参考下。

    习惯说一说
  • 记住:永远不要在 MySQL 中使用 UTF-8

    最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误:

    芋道源码
  • 手把手教你用R下载TCGA数据:RTCGAToolbox

    各位朋友,大家好,今天,我们分享TCGA数据的最后一个R包,RTCGAToolbox。TCGA数据量庞大,数据种类丰富,分析方法复杂,对于大部分研究人员来说,从...

    微点
  • MySQL 中 update 修改数据与原数据相同会再次执行吗?

    良月柒
  • Spark SQL从入门到精通

    熟悉spark sql的都知道,spark sql是从shark发展而来。Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划...

    Spark学习技巧
  • linux rsync + inotify搭建实时网页发布同步系统

    #如果不加这行strict modes = false,可能会出现@ERROR: auth failed on module mysql strict mod...

    葫芦
  • Spring Boot 最流行的 16 条实践解读!

    Spring Boot项目本身使用和集成了大量的开源项目,它帮助我们维护了这些第三方依赖。但是也有一部分在实际项目使用中并没有包括进来,这就需要我们在项目中自己...

    芋道源码

扫码关注云+社区

领取腾讯云代金券