告诉你 SQL 数据库与 NoSQL 数据库的区别

作者: Howie_Y | 来源:发表于2018-06-05 14:41 被阅读67次

    简单来说 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 数据库的区别

        本文链接:https://www.haomeiwen.com/subject/svwpsftx.html