目录
一、关系型数据库
二、非关系型数据库
1. 缓存型数据库
(1)Redis
(2)Memcached
2. 文档型数据库
(1)ElasticSearc
(2)mongoDB
3. 列式型数据库
(1)HBase
(2)Cassandra
一、关系型数据库
主流的有3个,mysql、sqlServer、Oracle
以sql为例,关系型数据库存储结构是二维表结构,类似依据x,y可以定位一个数据;
Relational DB ⇒ Databases ⇒ Tables ⇒ Rows ⇒ Columns
关系型数据库 数据库 表 行 列(字段)
基于行式存储,存储结构化数据,一行代表一条完整的信息。
关系型数据库遵循ACID特性(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)),支持事务处理能力。
但容量扩展性有限。
适用场景:
需要事务支持;
基于sql的结构化查询存储,处理复杂的关系。
二、非关系型数据库
即NoSQL数据库(not only sql),一般以简单的key-value模式存储,因此大大增加了数据库的扩展能力,不支持ACID,远超于SQL的性能。
一般用不着sql和用了sql也不行的情况,可以考虑使用Nosql。
适用场景:
对数据高并发的读写(mysql数据库存储在磁盘上,高并发会产生大量IO)
对海量数据的读写(mysql数据库不支持海量数据)
对数据高可扩展性的(例如key-value,redis中支持5种类型的value)
1. 缓存型数据库
(1)Redis
key -> value(String、list、set、hash(field-value)、zset(score-value))
内存中数据有时间限制,也提供RDB和AOF两种持久化方式。
(2)Memcached
区别是不会持久化,完全基于内存,基本被Redis替代了。
2. 文档型数据库
(1)ElasticSearc
ElasticSearch是一款分布式全文检索框架,底层基于Lucene实现。
ElasticSearch 使用 JSON 格式存储数据,属于文档存储。
Elasticsearch ⇒ Indices ⇒ Types ⇒ Documents ⇒ Fields
Els 索引 类型 文档 域(字段)
相比mysql交互性好但扩展性不足,HBase支持海量数据但查询灵活性不足,ES可以在容量和交互性上达到一个很好的平衡,而且支持全文检索。
(2)mongoDB
数据都存在内存中,如果内存不足,把不常用的数据保存到硬盘;
key-value模式,但对value(尤其是json)提供了丰富的查询功能,
可替代RDBMS,成立独立数据库,也可以配合RDBMS存储特定数据。
3. 列式型数据库
ps:行式存储和列式存储
行存储的写入是一次性完成,消耗的时间比列存储少,并且能够保证数据的完整性;
缺点是数据读取过程中会产生冗余数据,如果只有少量数据,此影响可以忽略;数量大可能会影响到数据的处理效率。
列存储在写入效率、保证数据完整性上都不如行存储,它的优势是在读取过程,不会产生冗余数据,这对数据完整性要求不高的大数据处理领域,比如互联网,犹为重要。
列式存储的主要优点之一就是可以大幅降低系统的I/O,尤其是在海量数据查询时,而I/O向来是系统的主要瓶颈之一。
(1)HBase
Hadoop项目中的数据库,基于HDFS,依赖于Zookeeper,用于需要对大量数据进行随机、实时的读写操作的场景;
适用于处理数据量非常大的表,可以处理超过10亿行数据,还可以处理数百万列元素的数据表。
key(rowkey、列族、列、时间戳) - value(具体的数据)
每一个key/value定义为一个cell,在HBase中,行是key-value映射的集合,这个映射通过rowkey唯一标识。
HBase的架构原理(7大组件)图文详解及其与Hive的区别
ps:Hive一般基于mysql,适用于离线大数据的查询,本质是将hiveSQL转化成MR然后提交到集群中执行,省去了大量写MR程序的操作,其操作的是结构化数据,本身是一个数据仓库工具,并不属于数据库之列。
(2)Cassandra
Appache Cassandra是一款免费的开源NoSQL数据库,其设计目的在于管理由大量商用服务器构建起来的庞大集群上的海量数据集(数据量通常达到PB级别)。在众多显著特性当中,Cassandra最为卓越的长处是对写入及读取操作进行规模调整,而且其不强调主集群的设计思路能够以相对直观的方式简化各集群的创建与扩展流程。