【README】

1.本文翻译自: NoSQL Vs SQL Databases | MongoDB

2.NoSQL指的是不止sql(not only sql);NoSQL数据库是2000年代末开发的,重点是扩展,快速查询,允许频繁变更,让编程更简单;

3.关系型数据库是1970年代开发的,重点的是减少数据重复,因为存储成本高于开发者时间。SQL数据库往往具有严格,复杂的表格模式,通常要求高成本的垂直扩展。(如迁移到一台性能更好的服务器)


【1】SQL与NoSQL区别

SQL 与 NOSQL 间的区别

区别条目

SQL数据库

NoSQL数据库

数据存储模型

固定行列的表格

document:json文档;

key-value:键值对;

wide-column:带有行与动态列的表格;

图:节点与边

发展历史

1970年代开始开发,关注的是减少数据重复

2000年代末开始开发,关注的是扩展,允许快速变更

例子

oracle,mysql

document:MongoDB 和 CouchDB;

key-value:redis 和 DynamoDB;

wide-column:Cassandra 和 HBase;

graph:Neo4j 和 Amazon Neptune

主要用途

通用

document:通用;

key-value:大量数据的简单查询;

wide-column:大量数据的预定义查询;

graph:分析和遍历连接数据的关系;

模式

严格

灵活的 

扩展性

垂直扩展(使用大型服务器向上扩展)(难度大,成本高)

横向扩展(跨商品服务器横向扩展)

(难度小,成本低)

ACID事务支持

支持

大多数都不支持多记录的ACID事务。

然而MongoDB可以支持ACID事务;

连表

通常需要

通常不需要

数据到对象的映射

要求对象关系映射-ORM

许多NoSQL数据库不需要对象关系映射;

MongoDB文档直接映射到大多数流行编程语言的数据结构。


 【2】NOSQL数据库的优点

相比于关系型数据库,nosql数据库提供了很多优点。NoSQL数据库

  • 拥有灵活的数据模型;
  • 支持横向扩展;
  • 非常快速的查询性能;易于开发者上手;

1)优点1:灵活的数据模型

NoSQL允许你按需把改变应用到数据库。你可以快速迭代和持续聚合新的特性,更快为用户提供数据服务;

2)优点2:横向扩展

当超出服务器性能时,大多数SQL数据库都要求你纵向扩展(迁移到更大的数据库,迁移成本非常昂贵)。

相反,大多数NoSQL数据库允许你横向扩展,意味着你可以随时按需增加偏移的商用服务器;

3)优点3:快速查询

NoSQL数据库中的查询能够比SQL数据库要快,为什么?

3.1)SQL数据库:因为SQL数据库的数据是规范化的,因此单个对象或整体的查询需要你连接多个表的数据。随着表的增长,连表的成本非常高昂;

3.2)NoSQL数据库:然而,NoSQL数据库中的数据通常以一种查询优化的方式进行存储。

  • 使用MongoDB的经验法则,把需要一起访问的数据存储在一起。
  • 查询通常不需要连表,因此查询更加快速;

4)优点4-开发人员易于上手

一些NoSQL数据库如MongoDB会把他们的数据结构映射到那些流行的编程语言;

  • 这种映射允许开发者以他们在代码中使用的相同方式存储数据;
  • 这种映射允许开发者写更少的代码,使得更加快速开发和更少缺陷;

【3】NoSQL数据库的缺点

1)缺点1:NoSQL不支持事务:

  • NoSQL操作多个文档时不支持ACID 事务特性(原子性,一致性,隔离性,持久性);
  • 使用合适的模型设计,单条记录的原子性是可以满足大多数应用的;
  • 为了解决不支持ACID事务特性的问题:mondoDB 在4.0版本开始支持多文档的ACID事务,并在4.2版本扩展到支持跨分片集群;

2)缺点2:NoSQL的存储空间比SQL数据库要大。

  • 因为NoSQL数据库的数据模型通常是根据查询而优化过的,并没有减少数据重复。
  • 因此存储相同业务数据,NoSQL数据库比SQL数据库占用的存储空间要大;存储介质非常便宜以至于这是一个很小的缺点;
  • 此外NoSQL数据库支持数据压缩以减少存储空间。

补充: 存储空间包括 磁盘空间,内存空间;