分享

关系与非关系型数据库

 精品唯居 2022-02-23

数据库

  按照数据结构来组织,存储管理数据的仓库

是一个长期存储在计算机内的,有组织的,可共享的,统一管理的大量数据的集合。

关系型数据库

  采用二维表格关系模型来组成数据的数据库,一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织

关系型数据库管理系统 RDBMS

MySQL Oracle msSQL

  优点:

  <1,二维表结构,容易理解

  <2,通用SQL语言,使用方便

  <3,支持ACID(原子性,一致性,隔离性,持久性),可以维护数据一致性

  <4,数据稳定,数据持久化到硬盘,支持海量数据存储

  <5,服务器性能卓越,服务稳定

    缺点:

    >1,高并发下IO压力大

      数据按存储,即使只针对其中某一列进行运算,也会将整行数据从存储设备中读入内存,导致IO较高

    >2,为维护索引付出的代价大

      数据的新增,更新必然伴随着所有二级索引的新增,更新。从而降低关系型数据库的读写能力,索引越多读写能力越差

    >3,为维护数据一致性付出的代价大

  关系型数据库在高并发下的能力是有瓶颈的,尤其是写入/更新频繁的情况下,出现瓶颈的结果就是数据库CPU高sql执行慢,客户端报数据库连接池不够等错误 

非关系型数据库

  非关系型的,分布式,且一般不保证遵循ACID原则的数据存储系统

NoSql(Not Only SQL)是对关系型数据库的一种补充,二者各有优势,取长补短

  优点:

    易扩展

  NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。无形之间,在架构的层面上带来了可扩展的能力。

    大数据量,高性能

  NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。一般MySQL使用Query Cache。NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说性能就要高很多。

    灵活的数据模型

  NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系数据库里,增删字段是一件非常麻烦的事情。如果是非常大数据量的表,增加字段简直就是——个噩梦。这点在大数据量的Web 2.0时代尤其明显。

    高可用

  NoSQL在不太影响性能的情况,就可以方便地实现高可用的架构。比如Cassandra、HBase模型,通过复制模型也能实现高可用。

  
    缺点:
    大多数nosql都不支持事务(redis支持,MongoDB不支持)
    大多都是初创产品,不够成熟,和传统数据库几十年的完善不可同日而语
    不支持sql这样的工业标准查询,所以学习成本就比较高
    nosql只能保证数据相对一致性,尤其是在数据同步的时候,主从服务器的状态是不一致
 

第一种分类:

 KV型NoSql ---- Redis,MemCache

  以键值对形式存储

    · 数据基于内存,读写效率高

    · KV型数据,时间复杂度为o(1),查询速度快

    · 查询方式单一

    · 无法支持海量数据存储

    · 存储是基于内存的,会丢失数据

    · 读远大于写,读取能力强

 搜索型NoSql ---- ElasticSearch

  其诞生就是为了解决关系型数据库全文搜索能力较弱的问题 ,全文搜索的原理是倒排索引

 列式NoSql ---- Hbase

  大数据时代最具代表性技术之一 以Hbase为代表

 文档型NoSql ---- MongoDB

  将半结构化数据存储为文档的一种NoSql,通常以JSON或XML格式存储数据,没有Schema,可随意的存储与读取数据,解决关系型数据库表结构扩展不方便的问题

 

第二种分类:

分类
Examples举例
典型应用场景
数据模型
优点
缺点
键值(key-value)
Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB
内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等。
Key 指向 Value 的键值对,通常用hash table来实现
查找速度快
数据无结构化,通常只被当作字符串或者二进制数据
列存储数据库
Cassandra, HBase, Riak
分布式的文件系统
以列簇式存储,将同一列数据存在一起
查找速度快,可扩展性强,更容易进行分布式扩展
功能相对局限
文档型数据库
CouchDB, MongoDb
Web应用(与Key-Value类似,Value是结构化的,不同的是数据库能够了解Value的内容)
Key-Value对应的键值对,Value为结构化数据
数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
查询性能不高,而且缺乏统一的查询语法。
图形(Graph)数据库
Neo4J, InfoGrid, Infinite Graph
社交网络,推荐系统等。专注于构建关系图谱
图结构
利用图结构相关算法。比如最短路径寻址,N度关系查找等
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多