永远正确的经典答案依然是:具体问题具体分析。

数据表VS.数据集

关系型和非关系型数据库的主要差异是数据存储的方式。关系型数据天然就是表格式的,因此存储在数据表的行和列中。数据表可以彼此关联协作存储,也很容易提取数据。与其相反,非关系型数据不适合存储在数据表的行和列中,而是大块组合在一起。非关系型数据通常存储在数据集中,就像文档、键值对或者图结构。你的数据及其特性是选择数据存储和提取方式的首要影响因素。

预定义结构VS.动态结构

关系型数据通常对应于结构化数据,因为数据表都有预定义好的结构(列的定义),结构描述了数据的形式和内容。这一点对数据建模至关重要,你必须“第一时间先把结构定义好”。虽然预定义结构带来了可靠性和稳定性,但是已经存入数据的表结构要修改就非常痛苦了。另一方面,非关系型数据基于动态结构,通常适用于非结构化数据。非关系型数据可以很容易适应数据类型和结构的变化,因为动态结构本身就支持这一点。

存储规范化VS存储代价

关系型数据库的数据存储是为了更高的规范性,把数据分隔成最小的逻辑表(关系表)以避免重复,获得最精简的空间利用。虽然数据规范性会使数据管理更清晰,但它通常也会带来一点点复杂性,尤其是单个操作可能涉及多个关系表的时候,数据管理就有点麻烦。另外,更精简的空间利用通常可以节约宝贵的数据存储,但是在当今世界我们基本可以认为存储的代价(磁盘空间)是微不足道的。而非关系型数据存储在平面数据集中,数据经常可能存在重复。单个数据库很少被分隔开,而是存储成一个整体,这样是为了整块数据更容易读写。

纵向扩容VS横向扩容

SQL和NoSQL数据库最大的差别可能是在扩展方式上,要支持日益增长的需求当然要扩展。要支持更多并发量,SQL数据库是纵向扩展,也就是说提高处理能力,使用速度更快速的计算机,这样处理相同的数据集就更快了。因为数据存储在关系表中,操作的性能瓶颈可能涉及很多个表,这都需要通过提高计算机性能来客服。虽然SQL数据库有很大扩展空间,但最终肯定会达到纵向扩展的上限。而NoSQL数据库是横向扩展的。非关系型数据存储天然就是分布式的,NoSQL数据库的扩展可以通过给资源池添加更多普通的数据库服务器(节点)来分担负载。

结构化查询VS非结构化查询

关系型数据库通过所谓结构化查询语言(也就是我们常说的SQL)来操作数据。SQL支持数据库CRUD(增加,查询,更新,删除)操作的功能非常强大,是业界标准用法。非关系型数据库以块(像文档一样)为单元操纵数据,使用所谓的非结构化查询语言(UnQL),它是没有标准的,因数据库提供商的不同而不同。关系型表中主键的概念对应非关系存储中的文档Id。SQL数据库使用预定义优化方式(比如列索引定义)帮助加速查询操作,而NoSQL数据库采用更简单而精确的数据访问模式。

映射VS本地化

SQL和NoSQL数据存储的选择还取决于开发人员,尽管这个因素影响不大。采用面向对象编程语言的开发人员通常会同时操作一个或多个数据实体(包括嵌套数据、列表和数组的复杂结构),把数据传递给应用程序用户界面。要是讨论到底层数据库,事情就并不总是那么公平合理了。在关系型存储中,数据实体通常需要分成多个部分进行规范化,然后分开存储到多个关系型表中精简存储。幸运的是,这是一个长期存在的问题,大部分编程平台都有相应的简单解决方案,比如ORM层(对象关系映射)。ORM是位于关系型数据源和开发者使用的面向对象数据实体之间的一个映射层。然而,对于非关系型存储,不需要规范化数据,复杂数据实体可以整体存放在独立单元中。应用程序中使用的对象通常序列化为JSon串,存储在NoSQL数据库的JSon文档中。

事务性VS纯扩展性

如果你的数据操作需要高事务性或者复杂数据查询需要控制执行计划,那么传统的SQL数据库从性能和稳定性方面考虑是你的最佳选择。SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务。虽然NoSQL数据库也可以使用事务操作,但它们真正闪亮的价值是在操作的扩展性和大数据量处理方面。

ACID VS CAP

SQL 数据库久负盛名的价值就是通过所谓的ACID属性(原子性,一致性,隔离性,持久性)保证数据完整性,大部分关系型存储供应商都支持ACID。我们的目标是支持隔离不可分割的事务,其变化是持久的,数据也保持一致状态。而NoSQL数据库是让你在CAP(一致性,可用性,分区容忍度)中的任意两项中选择,因为在基于节点的分布式系统中,很难做到三项都满足。

数据VS大数据

SQL数据库可以可靠地存储和处理数据,而NoSQL最大的优势是在应对大数据方面,也就是由我们社会或者计算机每天产生的大量非结构化的数据实体。NoSQL用无模式方式做数据管理,所以其横向扩展潜力是无限的,这可能是深度处理大数据捕获、管理、检索、分析和可视化的唯一有效途径。

数据记录VS物联网和人联网

关系数据库在关注数据规范化和保证性能的基础上精简存储。但是近年来,我们产生数据的速度远大于关系型存储能满足存储的能力增长。刺激数据如此迅猛增长的原因是:巨大量的用户数和物联网。连接到互联网的用户在成倍增加,在同步使用我们的应用。由于大量移动设备数据传感设备接入互联网,机器产生的数据量也大幅增加。因此企业必须寻求NoSQL技术及基础架构来处理持续涌入的半结构化和非结构化数据。

内部部署VS云计算

云计算现在已经无处不在了,它兼具SQL和NoSQL数据库的益处。云环境中的关系型存储通常是以服务形式提供的,是可复制、高可用性且分布式的,极大地提高了横向扩展能力。托管于云服务中的NoSQL数据库也天然享有自动分片的好处,可以阶段性地灵活弹性处理,集成高速缓存和巨大的计算能力来捕获、存储和分析大数据。

付费VS开源

有一种看法认为,SQL数据库大多数比较昂贵,而NoSQL数据库通常都是开源的。事实上,两种类型数据库都有开源的和商业的。常见的SQL 数据库有微软公司的SQL Server,MySQL,SQLite,Oracle和PostGres。流行的NoSQL数据库有Couchbase,MongoDB,Redis,BigTable和RavenDB。

SQL和NoSQL这两者都有各自的优缺点,选择正确的架构取决于你构建应用的需求。

来源:http://m.blog.csdn.net/article/details?id=51779361

SQL与NoSQL(关系型与非关系型)数据库的区别的更多相关文章

  1. SQL到NoSQL概览性总结之一 数据库应用场景选型

    数据库类型与实例 适合场景 不适合场景 场景举例 关系数据库 基于集合理论,具有行和列的二维表,严格使用类型 开源MySQL/MariaDB, PostgreSQL 商业:Oracle,DB2,SQL ...

  2. 非关系型数据库(nosql)介绍

    非关系型数据库也叫Nosql数据库,全称是not noly sql. 2009年初,Johan Oskarsson举办了一场关于开源分布式数据库的讨论,Eric Evans在这次讨论中提出了NoSQL ...

  3. 非关系型数据库Nosql的优缺点分析

    Nosql的全称是Not Only Sql,Nosql指的是非关系型数据库,而我们常用的都是关系型数据库.就像我们常用的mysql,oralce.sqlserver等一样,这些数据库一般用来存储重要信 ...

  4. 关系型数据库 VS 非关系型数据库

    一.关系型数据库? 1.概念 关系型数据库是指采用了关系模型来组织数据的数据库.简单来说,关系模式就是二维表格模型. 主要代表:SQL Server,Oracle,Mysql,PostgreSQL. ...

  5. Redis 01: 非关系型数据库 + 配置Redis

    数据库应用的发展历程 单机数据库时代:一个应用,一个数据库实例 缓存时代:对某些表中的数据访问频繁,则对这些数据设置缓存(此时数据库中总的数据量不是很大) 水平切分时代:将数据库中的表存放到不同数据库 ...

  6. JavaWeb笔记(十)非关系型数据库Redis

    Redis Redis是一款高性能的NOSQL系列的非关系型数据库 主流的NOSQL产品 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant.Redis.Vol ...

  7. 技术分享|SQL和 NoSQL数据库之间的差异:MySQL(VS)MongoDB

    在当今市场上,存在各种类型的数据库,选择适合你业务类型的数据库对应用的开发和维护有着重要意义.本篇文章,将为大家分享SQL和NoSQL语言之间的区别,同时还将比较这两种类型的数据库,以帮助小伙伴们选择 ...

  8. SQL VS NoSQL

    (关系型与非关系型)数据库的区别: 关系型和非关系型数据库的主要差异是数据存储的方式 1.1 数据表 VS 数据集 关系型数据天然就是表格式的,因此存储在数据表的行和列中.数据表可以彼此关联协作存储, ...

  9. 初识关系型数据库(SQL)与非关系型数据库(NOSQL)

    一.关系型数据库(SQL): Mysql,oracle 特点:数据和数据之间,表和字段之间,表和表之间是存在关系的 例如:部门表 001部分,   员工表 001 用户表,用户名.密码 分类表 和 商 ...

随机推荐

  1. Asp.net SignalR 实现服务端消息推送到Web端

              之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我 ...

  2. Android活动启动模式

    在android中,android活动是以栈的方式进行存储,在栈中的活动不断被重新激活至前台和不断被终止也不断被排序.因此对于栈中的活动管理也是一个比较麻烦的事情. android给我们提供了两类活动 ...

  3. GJM : 【C# 高性能服务器】完成端口、心跳的高性能Socket服务器 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  4. quartz TRIGGER_STATE变为ERROR解决方法

    今天,项目组一个同事说开发环境一直正常quartz定时任务今天不跑了,因为异常已经封装了,所以应该不是没有捕获异常导致.也检查了JobDetail肯定没有重复的任务,最后检查qrtz_triggers ...

  5. AWS CloudFront CDN直接全站加速折腾记The request could not be satisfied. Bad request

    ERROR The request could not be satisfied. Bad request. Generated by cloudfront (CloudFront) Request ...

  6. 定制Eclipse IDE之插件篇(一)

    上文回顾:定制Eclipse IDE之功能篇(二) 在这篇文章中,我会将我定制eclipse用到的其他插件罗列出来. 一.汉化插件 Eclipse本身是英文显示的,我们能够通过插件汉化.  1. 选择 ...

  7. User Profile Service Application 配置同步连接时,报 MOSS MA not found

    最近在试着配置"我的网站",不知什么原因在配置同步连接时报:MOSS MA not found 搜索发现,需要启动Forefront Identity Manager Servic ...

  8. 如何:对 SharePoint 列表项隐藏 ECB 中的菜单项

    可以通过使用功能框架向编辑控制块 (ECB) 菜单添加新的自定义操作.但是,您不能使用此方法进行相反的操作,即隐藏现有的 ECB 菜单项,因为它们是通过使用 ECMAScript(JavaScript ...

  9. Office 365 – SharePoint 2013 Online 之WebPart开发、部署教程

    1.打开Visual Studio,新建一个项目,选择SharePoint空项目,如下图: 2.选择调试站点和沙盒解决方案,如下图: 3.在项目中,添加一个WebPart,如下图: 4.添加完毕的项目 ...

  10. 愚人节大狂欢 – ADN DevBlog谎话连篇友谊赛

    愚人节过去了,你被捉弄了没有? :) 借这个机会,ADN的哥们儿也发泄狂欢了一把,我们4月1号当天在ADN DevBlog上发了一堆谎话连篇的blog,没有一个说实话的,哈哈.这是我们team内部进行 ...