zoukankan      html  css  js  c++  java
  • 非关系型数据库(NOSQL)和关系型数据库(SQL)区别详解

    前言:

    在我们的日常开发中,关系型数据库和非关系型数据库的使用已经是一个成熟的软件产品开发过程中必不可却的存储数据的工具了。那么用了这么久的关系数据库和非关系型数据库你们都知道他们之间的区别了吗?下面我们来详细的介绍一下。

    关系型数据库(SQL):

    什么是(SQL)关系型数据库:

    关系型数据库指的是使用关系模型(二维表格模型)来组织数据的数据库。

    什么是关系模型:

    关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织。

    常见关系型数据库管理系统(ORDBMS):

    1. Oracle
    2. MySql
    3. Microsoft SQL Server
    4. SQLite
    5. PostgreSQL
    6. IBM DB2

    关系型数据库的优势:

    1. 采用二维表结构非常贴近正常开发逻辑(关系型数据模型相对层次型数据模型和网状型数据模型等其他模型来说更容易理解);
    2. 支持通用的SQL(结构化查询语言)语句;
    3. 丰富的完整性大大减少了数据冗余和数据不一致的问题。并且全部由表结构组成,文件格式一致;
    4. 可以用SQL句子多个表之间做非常繁杂的查询;
    5. 关系型数据库提供对事务的支持,能保证系统中事务的正确执行,同时提供事务的恢复、回滚、并发控制和死锁问题的解决。
    6. 数据存储在磁盘中,安全可靠。

    关系型数据库存在的不足:

    随着互联网企业的不断发展,数据日益增多,因此关系型数据库面对海量的数据会存在很多的不足。
    1. 高并发读写能力差:网站类用户的并发性访问非常高,而一台数据库的最大连接数有限,且硬盘 I/O 有限,不能满足很多人同时连接。
    2. 海量数据情况下读写效率低:对大数据量的表进行读写操作时,需要等待较长的时间等待响应。
    3. 可扩展性不足:不像web server和app server那样简单的添加硬件和服务节点来拓展性能和负荷工作能力。
    4. 数据模型灵活度低:关系型数据库的数据模型定义严格,无法快速容纳新的数据类型(需要提前知道需要存储什么样类型的数据)。

    非关系型数据库(NOSQL):

    什么是(NOSQL)非关系型数据库:

    非关系型数据库又被称为 NoSQL(Not Only SQL ),意为不仅仅是 SQL。通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定,常用于存储非结构化的数据。

    常见的NOSQL数据库:

    1. 键值数据库:Redis、Memcached、Riak
    2. 列族数据库:Bigtable、HBase、Cassandra
    3. 文档数据库:MongoDB、CouchDB、MarkLogic
    4. 图形数据库:Neo4j、InfoGrid

    非关系型数据库的优势:

    1. 非关系型数据库存储数据的格式可以是 key-value 形式、文档形式、图片形式等。使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
    2. 速度快,效率高。 NoSQL 可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘。
    3. 海量数据的维护和处理非常轻松,成本低。
    4. 非关系型数据库具有扩展简单、高并发、高稳定性、成本低廉的优势。
    5. 可以实现数据的分布式处理。

    非关系型数据库存在的不足:

    1. 非关系型数据库暂时不提供 SQL 支持,学习和使用成本较高。
    2. 非关系数据库没有事务处理,无法保证数据的完整性和安全性。适合处理海量数据,但是不一定安全。
    3. 功能没有关系型数据库完善。
    4. 复杂表关联查询不容易实现。

    作者:追逐时光者

    作者简介:一个热爱编程,善于分享,喜欢学习、探索、尝试新事物,新技术的程序猿。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果觉得时光这篇文章有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确或错误的地方,欢迎指正、补充,不胜感激 !

  • 相关阅读:
    poj-2888-矩阵+polya
    hdu-2865-polya+dp+矩阵+euler函数
    poj-2154-polya+euler函数
    poj-1026-置换
    poj-2369-置换
    2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(二) controller
    2017.2.13 开涛shiro教程-第十二章-与Spring集成(二)shiro权限注解
    2017.2.13 开涛shiro教程-第十二章-与Spring集成(一)配置文件详解
    2017.2.12 开涛shiro教程-第八章-拦截器机制
    2017.2.12 开涛shiro教程-第七章-与Web集成
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/14353082.html
Copyright © 2011-2022 走看看