简单来说 SQL 数据库和 NoSQL 数据库有着共同的目标:存储数据,但存储的方式不同

一. 表

  • SQL中的表结构具有严格的数据模式约束: 存储数据很难出错。
  • NoSQL存储数据更加灵活自由:可能导致数据不一致性问题的发生。

SQL

每个表规定了固定的字段,各个字段有固定的类型

NoSQL

而 NoSQL 使用类 Json 的键值对存储数据(还有使用阵列、图形的),

一个记录或者说一个文档可以是这样的格式

KEY 1:
{
id: 123456,
name:"howie",
age: 20
}

也可以是这样的格式

KEY 2:
{
ISBN: 9780992461225,
title: "JavaScript: Novice to Ninja",
author: "Darren Jones",
price: 29.00,
review: [
{ name: "A Reader", text: "The best JavaScript book I've ever read." },
{ name: "JS Expert", text: "Recommended to novice and expert developers alike." }
]
}

所有的记录组成一个集合,例如 redis

二. 数据库的模式

SQL 模式

关系型数据库中,在把数据存储进去前,你需要做很多工作,如设置数据库字符集,定义主键,设置各个字段的类型,设置索引等等,这些就是关系型数据库的模式,这些模式的限制,让表结构有着严格的约束。

NoSQL 无模式

而非关系型数据库的数据可以随时写入,不需要去事先定好各种条条框框,也正因为如此,NoSQL 数据库更适合于那些不能够确定数据需求的的工程项目。

三. 数据库的规范化

SQL 规范化

例如我们拥有两表

用户表:

购物表:

通常情况下,我们不会在购物表中重复每个 user 的所有信息,而是会添加 user_id 字段关联两个表,以最小化数据的冗余。

这叫做数据库的规范化

NoSQL 非规范化

规范化的设计方法很好地优化了数据冗余,但是在 NoSQL 中一般不会这么设计,我们会直接为每一条购物数据都添上用户的所有信息:

{
id: 1,
pay: 20,
goods: "杯子",
number: 2,
time: "2018-06-04 22:58:46",
user : {
id: 1,
name: "Time",
age: 18,
password: "111111",
}
},
{
id: 2,
pay: 50,
goods: "书本",
number: 1,
time: "2018-06-04 22:59:46",
user : {
id: 1,
name: "Time",
age: 18,
password: "111111",
}
}

目的是更快地查询,当然,如果需要频繁更新用户信息,自然会使效率下降

四. 事务

SQL 数据库中提供了事务操作,将两条或者多条更新操作结合成一个事务(要么全部执行成功要么都失败)。

而 NoSQL 数据库则缺乏传统的事务机制,不过很多 NoSQL 数据库也有各自的方式去处理这一类问题

五. 操作语法

SQL 数据库使用传统的 SQL 语言来进行增删查改,而 NoSQL 数据库则使用各自的语法来进行操作。

比如查询,对比 SQL 的 select * from table; , MongoDB 有 db.table.find() ,HBase 有scan table

通常情况下,由于 NoSQL 非规范化,数据模型的简单等原因 NoSQL 比 SQL 语言更快,当然,一个设计得好的 SQL 数据库的表现一定会比一个设计得不好的 NoSQL 数据库性能好很多

六. 适用场景

适合使用 SQL 开发的项目:
  • 数据库模式,结构可以预先规定的,或者可以相对固定的项目
  • 要求数据一致性
  • 具有良好的开发者经验和技术支持的标准的成熟技术
适合使用 NoSQL 开发的项目:
  • 不相关,不确定和逐步发展的数据需求
  • 更简单或者更宽松的能够快速开始编程的项目
  • 速度和可扩展性至关重要的

当然现在很多项目都使用 SQL 和 NoSQL 相结合的方式,各自发挥其优点。


以上为文章所有内容,如有错误,敬请指出,多多指教,谢谢!

告诉你 SQL 数据库与 NoSQL 数据库的区别的更多相关文章

  1. 关系型数据库与NoSQL数据库

    关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...

  2. 关系型数据库和NOSQL数据库对比

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt328 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概 ...

  3. 关系型数据库与NoSQL数据库的优劣

    当大家学习了一定的NoSQL知识以后,了解了现今许多NoSQL数据库(如HBase,MongoDB,Redis等)时,就会觉得关系型数据库可能已经跟不上时代的步伐.其实并不然,关系型数据库的性能绝对不 ...

  4. 关系型数据库和NoSQL数据库

    一.数据库排名和流行趋势 1.1 Complete ranking 链接: https://db-engines.com/en/ranking 在这个网站列出了所有数据库的排名,还可以看到所属数据库类 ...

  5. 大数据学习资料之SQL与NOSQL数据库

    这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...

  6. 关系型数据库与NOSQL

    本文转载自: http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) ...

  7. 关系型数据库与NOSQL(转)

    出处:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html 关系型数据库把所有的数据都通过行和列的二元表现形式表示出来. 关系 ...

  8. NoSQL数据库

    NoSQL数据库 1.NoSQL简介 最初表示"反SQL"运动,用新型的非关系型数据库取代关系数据库:现在表示"Not only SQL"关系和非关系型数据库各 ...

  9. 一文读懂非关系型数据库(NoSQL)

    为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...

随机推荐

  1. 远程桌面授权server没有提供许可证问题解决方法

    今天远程server报如图所看到的错误,网上查找的方法 方法一:(亲測有效) mstsc /V:192.168.0.3 /admin  方法二:(因为server正在使用中,未作測试) 删除远程桌面服 ...

  2. Build website project by roslyn through devenv.com

    1.fetch the source code2.compile controls project3.copy files under bin folder of controls to bin fo ...

  3. 国外物联网平台初探(三) ——IBM Watson IoT

    平台定位 提供全面管理的云托管服务,旨在简化并从 IoT 设备中获得价值. Watson IoT Platform 提供对 IoT 设备和数据的强大应用程序访问,可快速编写分析应用程序.可视化仪表板和 ...

  4. J2EE7与Servlet3.x

    J2EE7结构图 JWS:即Java Web Service,指与webservice相关的JavaEE技术部分,webservice是一种基于XML的独立的.跨平台的.互操作的应用程序,XML又包含 ...

  5. kindoreditor上传图片

    <!doctype html><html> <head> <meta charset="utf-8" /> <title> ...

  6. 2018亚洲区预选赛北京赛站网络赛 D.80 Days 尺取

    题面 题意:你带着K元要去n个城市,这n个城市是环形的,你可以选择任意一个起点,然后顺时针走,对于每个城市,到达时可以获得a元,但是从这里离开又需要花费b元,问你能否找到一个起点(输出花钱最少的那个) ...

  7. jar运行main函数的方法

    当把java项目打包成jar后,如何运行main函数呢? 第一种:指定运行类: java -cp test.jar com.ming.test.Test 第二种:在MANIFEST.MF里配置了Mai ...

  8. php 微信支付 回调通知不停的坑

    微信支付已完工,最后有点小问题就是微信的回调会重复9次 第一步: $return = "success"; echo $return; 不管用 第二步: $return = &qu ...

  9. SQLServer inner join,left join,right join,outer join 备忘备忘

    LEFT JOIN LEFT JOIN 关键字会从左表那里返回所有的行,即使在右表中没有匹配的行. 即LEFT JOIN 的 ON 条件不会对数据行造成影响 RIGHT JOIN RIGHT JOIN ...

  10. <a>和<table>标签的应用

    今天介绍一下html中最重要的标签 标签分为 1.一般标签 如<img> <b></b>等 2.功能标签 如<a></a> 3.实体 如&a ...