告诉你 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 相结合的方式,各自发挥其优点。


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

目录
相关文章
|
5天前
|
Oracle 关系型数据库 数据库
阿里云数据库 ACP 问题之阿里云数据库ACP认证与ACA认证有什么区别
阿里云数据库 ACP 问题之阿里云数据库ACP认证与ACA认证有什么区别
阿里云数据库 ACP 问题之阿里云数据库ACP认证与ACA认证有什么区别
|
3天前
|
SQL 数据库 Python
数据库 SQL常用语句
这篇文章是数据库SQL的常用语句指南,涵盖了查询格式、WHERE子句查询条件、多表连接查询、嵌套查询、字符匹配查询以及其他指令如排序、聚集函数、GROUP BY分组、EXIST子查询和外连接等知识点。
|
7天前
|
SQL 数据库
Microsoft SQL Server 2014如何来备份数据库
Microsoft SQL Server 2014如何来备份数据库
10 3
|
7天前
|
SQL NoSQL 数据库
开发效率与灵活性:SQL vs NoSQL
【8月更文第24天】随着大数据和实时应用的兴起,数据库技术也在不断发展以适应新的需求。传统的SQL(结构化查询语言)数据库因其成熟的数据管理机制而被广泛使用,而NoSQL(Not Only SQL)数据库则以其灵活性和扩展性赢得了众多开发者的青睐。本文将从开发者的视角出发,探讨这两种数据库类型的优缺点,并通过具体的代码示例来说明它们在实际开发中的应用。
29 1
|
7天前
|
SQL 关系型数据库 MySQL
【MySQL 慢查询秘籍】慢SQL无处遁形!实战指南:一步步教你揪出数据库性能杀手!
【8月更文挑战第24天】本文以教程形式深入探讨了MySQL慢SQL查询的分析与优化方法。首先介绍了如何配置MySQL以记录执行时间过长的SQL语句。接着,利用内置工具`mysqlslowlog`及第三方工具`pt-query-digest`对慢查询日志进行了详细分析。通过一个具体示例展示了可能导致性能瓶颈的查询,并提出了相应的优化策略,包括添加索引、缩小查询范围、使用`EXPLAIN`分析执行计划等。掌握这些技巧对于提升MySQL数据库性能具有重要意义。
34 1
|
9天前
|
SQL 存储 监控
ADBPG&Greenplum成本优化问题之通过SQL查询找到数据库中所有的复制表如何解决
ADBPG&Greenplum成本优化问题之通过SQL查询找到数据库中所有的复制表如何解决
25 1
|
11天前
|
Linux 数据库 数据安全/隐私保护
|
5天前
|
SQL Java 数据库
云数据库问题之上述查询语句中的慢SQL问题如何解决
云数据库问题之上述查询语句中的慢SQL问题如何解决
|
7天前
|
网络协议 NoSQL 网络安全
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
【Azure 应用服务】由Web App“无法连接数据库”而逐步分析到解析内网地址的办法(SQL和Redis开启private endpoint,只能通过内网访问,无法从公网访问的情况下)
|
7天前
|
SQL NoSQL 关系型数据库
性能与扩展性的考量:SQL vs NoSQL
【8月更文第24天】在选择数据库系统时,开发者和架构师面临着一个关键决策:是选择传统的SQL(结构化查询语言)数据库还是现代的NoSQL(非关系型)数据库。这两种类型各有优劣,尤其是在性能和扩展性方面。本文将深入探讨SQL和NoSQL数据库在这两个方面的差异,并通过具体的代码示例来展示它们各自的优势。
20 0

热门文章

最新文章

下一篇
云函数