告诉你 SQL 数据库与 NoSQL 数据库的区别
简单来说 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 数据库的区别的更多相关文章
- 关系型数据库与NoSQL数据库
关系型数据库的优缺点 优点: 可以做事务处理,从而保证了数据的一致性: 可以进行JOIN等多表查询: 由于以SQL标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处). 缺点: 大量数据的写 ...
- 关系型数据库和NOSQL数据库对比
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt328 关系型数据库,是建立在关系模型基础上的数据库,其借助于集合代数等数学概 ...
- 关系型数据库与NoSQL数据库的优劣
当大家学习了一定的NoSQL知识以后,了解了现今许多NoSQL数据库(如HBase,MongoDB,Redis等)时,就会觉得关系型数据库可能已经跟不上时代的步伐.其实并不然,关系型数据库的性能绝对不 ...
- 关系型数据库和NoSQL数据库
一.数据库排名和流行趋势 1.1 Complete ranking 链接: https://db-engines.com/en/ranking 在这个网站列出了所有数据库的排名,还可以看到所属数据库类 ...
- 大数据学习资料之SQL与NOSQL数据库
这几年的大数据热潮带动了一激活了一大批hadoop学习爱好者.有自学hadoop的,有报名培训班学习的.所有接触过hadoop的人都知道,单独搭建hadoop里每个组建都需要运行环境.修改配置文件测试 ...
- 关系型数据库与NOSQL
本文转载自: http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html(只作转载, 不代表本站和博主同意文中观点或证实文中信息) ...
- 关系型数据库与NOSQL(转)
出处:http://www.cnblogs.com/chay1227/archive/2013/03/17/2964020.html 关系型数据库把所有的数据都通过行和列的二元表现形式表示出来. 关系 ...
- NoSQL数据库
NoSQL数据库 1.NoSQL简介 最初表示"反SQL"运动,用新型的非关系型数据库取代关系数据库:现在表示"Not only SQL"关系和非关系型数据库各 ...
- 一文读懂非关系型数据库(NoSQL)
为了更好的理解非关系型数据库,我又深入的度娘了下 原文地址:https://baijiahao.baidu.com/po/feed/share?wfr=spider&for=pc&co ...
随机推荐
- 浅谈搜狐云景PAAS平台
前言: 搜狐云景作为搜狐的paas平台,在2014年5月22日的云计算大会上正式公布了公測.初測,注冊用户必须先申请邀请码參与公測会赠送用户100元电子券,经过实名认证之后会再赠送100电子券.目測能 ...
- redhat gitlab的搭建
http://www.cnblogs.com/derekchen/p/5870723.html 1.新建 /etc/yum.repos.d/gitlab-ce.repo,添加以下内容 [gitlab- ...
- linux虚拟机网络设置(本机使用公司内网)
使用桥接方式 设置: 一开始没有的话可以add 编辑edit 参考公司网络,下图是公司内网地址 然后设置 然后ping就ok了
- Spring——概览
Spring是什么? Spring是帮助开发者简化开发工作的工具. Spring的出现就是为了简化人们的复杂的开发.能够在不论什么Java应用中使用,使用了主要的JavaBean取代EJB. Spri ...
- 谈谈cookie的弊端
一.cookie虽然在数据在客户端持久存储提供了方便,但是分担了服务器数据传输的负担,还是存在很大的局限性的. 局限性: (1)在特定的域名下最多存储20个cookie. 浏览器版本 ...
- RabbitMQ消息队列服务
MQ 全称为 Message Queue, 消息队列( MQ ) 是一种应用程序对应用程序的通信方法.应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们. 一个软件它 ...
- Springboot使用AOP实现统一处理Web请求日志
1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置 2.新建 resources/log4j.properties 我的设置为: # LOG4J ...
- Oracle性能优化——总体介绍
最近参加Oracle的培训,对Oracle有了更加深入的认识,在此做个学习总结. 1.Oracle数据库调优不能仅指望修改几项数据库参数就能有明显效果,问题更多出在应用方面,教育开发者正确地使用数据库 ...
- SQL server存储过程学习
由于之前使用 Linq to Sql来操作数据库,对于数据库的存储过程.函数等比较薄弱.乘着自己闲着的时候,就百度自学了一点存储过程,以防以后要用. 基础通俗易懂的存储过程通过 存储过程学习 ,然后自 ...
- website robots.txt 防爬虫 措施
robots.txt文件用法举例: 1. 允许所有的robot访问 User-agent: * Allow: / 或者 User-agent: * Disallow: 2. 禁止所有搜索引擎访问网站的 ...