• 关系型数据库与非关系型数据库


    关系型数据库:

      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)实时计算:如实时监控,可以考虑选内存型或者列式数据库

  • 相关阅读:
    C++primer plus第六版课后编程题答案7.2
    sprintf函数
    sscanf函数
    [转]Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案
    C/C++动态二维数组的内存分配和释放
    malloc动态分配多维数组
    区间重合判断[poj2808 校门外的树]
    C++中的sort函数
    C语言qsort
    [转]Linux统计代码行数
  • 原文地址:https://www.cnblogs.com/lemonyam/p/11954970.html
Copyright © 2020-2023  润新知