永远正确的经典答案依然是:具体问题具体分析。数据库
数据表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