从此
文章
📄文章 #️⃣专题 🌐上网 📺 🛒 📱

关系型数据库(RDBMS) 和 非关系型数据库

🕗2019-12-17

关系型数据库:

  1、定义:

    创建在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据

  2、关系模型常用概念:

    (1)关系:可以理解为一张二维表,每个关系都具有一个关系名,就是通常说的表名

    (2)元组:可以理解为二维表中的一行,在数据库中经常被称为记录

    (3)属性:可以理解为二维表中的一列,在数据库中经常被称为字段

    (4)域:属性的取值范围,也就是数据库中某一列的取值限制

    (5)关键字:一组可以唯一标识元组的属性,数据库中常称为主键,由一个或多个列组成

    (6)关系模式:指对关系的描述。其格式为:关系名(属性1,属性2,... ,属性N),在数据库中成为表结构

  3、关系模块中常用的操作:

    (1)数据查询:选择、投影、连接、并、交、差、除

    (2)数据操作:插入、删除、修改、查询

  4、模式结构:

    外模式、模式、内模式

  5、特点:

    (1)基于单一关系模型,结构化存储,有完整性约束

    (2)通过二维表建立数据之间的联系

    (3)采用结构化查询语言(SQL)做数据读写

    (4)操作保存数据的一致性

  6、优点:

    (1)容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解

    (2)使用方便:通用的 SQL 语言使得操作关系型数据库非常方便

    (3)易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率

  7、缺点:

    (1)高并发读写需求:用户并发性非常高,对于传统关系型数据库来说,硬盘 I/O 是一个很大的瓶颈

    (2)海量数据的高效率读写:网站每天产生的数据量是巨大的,对于关系型数据库来说,

                             在一张包含海量数据的表中查询,效率是非常低的

    (3)高扩展性和可用性:在基于web的结构当中,数据库是最难进行横向扩展的,当一个应用系统的用户量和访问量

                         与日俱增时,数据库却没法像 web server 和 app server 那样简单的通过添加更多的硬件

                         和服务节点来扩展性能和负载能力

 

非关系型数据库:

  1、定义:

    (1)对不同于传统的关系数据库的数据库管理系统的统称

    (2)其数据存储可以不需要固定的表格模式,也经常会避免使用 SQL 的 JOIN 操作,一般有水平可扩展性的特征

  2、主要分类:

    (1)面向高性能并发读写的 key-value 数据库:key-value数据库的主要特点即使具有极高的并发读写性能,

                                              Redis,Tokyo Cabinet,Flare就是这类的代表

    (2)面向海量数据访问的面向文档数据库:这类数据库的特点是,可以在海量的数据中快速的查询数据,

                                         典型代表为 MongoDB 以及 CouchDB

    (3)面向可扩展性的分布式数据库:这类数据库想解决的问题就是传统数据库存在可扩展性上的缺陷,

                                   可以适应数据量的增加以及数据结构的变化

  3、特点:

    (1)非结构化的存储

    (2)基于多维关系模型

    (3)具有特有的使用场景

  4、优点:

    (1)高并发,大数据下读写能力较强

    (2)基本支持分布式,易于扩展,可伸缩

    (3)简单,弱结构化存储

  5、缺点:

    (1)join 等复杂操作能力较弱

    (2)事务支持较弱

    (3)通用性差

    (4)无完整约束复杂业务场景支持较差

 

总结:

  1、关系型数据库和 NoSQL 数据库的选型,往往需要考虑几个指标:

    (1)数据量     (2)并发量     (3)实时性

    (4)一致性要求     (5)读写分布和类型

    (6)安全性     (7)运维成本

  2、常见软件系统数据库选型参考如下:

    (1)内部使用的管理型系统:如运营系统,数据量少,并发量小,首选考虑关系型

    (2)大流量系统:如电商单品页,后台考虑选关系型,前台考虑选内存型

    (3)日志型系统:原始数据考虑选列式,日志搜索考虑选倒排索引

    (4)搜索型系统:例如站内搜索,非通用搜索,如商品搜索,后台考虑选关系型,前台考虑选倒排索引

    (5)事务型系统:如库存,交易,记账,考虑选关系型型+缓存+一致性型协议

    (6)离线计算:如大量数据分析,考虑选列式或者关系型也可以

    (7)实时计算:如实时监控,可以考虑选内存型或者列式数据库