关系与非关系型数据库
按照数据结构来组织,存储和管理数据的仓库。
是一个长期存储在计算机内的,有组织的,可共享的,统一管理的大量数据的集合。
关系型数据库
采用了二维表格关系模型来组成数据的数据库,一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织
关系型数据库管理系统 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模型,通过复制模型也能实现高可用。
第一种分类:
KV型NoSql ---- Redis,MemCache
以键值对形式存储
• 数据基于内存,读写效率高
• KV型数据,时间复杂度为o(1),查询速度快
• 查询方式单一
• 无法支持海量数据存储
• 存储是基于内存的,会丢失数据
• 读远大于写,读取能力强
搜索型NoSql ---- ElasticSearch
其诞生就是为了解决关系型数据库全文搜索能力较弱的问题 ,全文搜索的原理是倒排索引
列式NoSql ---- Hbase
大数据时代最具代表性技术之一 以Hbase为代表
文档型NoSql ---- MongoDB
第二种分类:
分类
|
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度关系查找等
|
很多时候需要对整个图做计算才能得出需要的信息,而且这种结构不太好做分布式的集群方案。
|