常见数据库分类
数据库 刘宇帅 2月前 阅读量: 273
常见的数据库主要分为三类,SQL(关系型数据库)、NoSQL(非关系型数据库)、NewSQL。
SQL
SQL即关系型数据库(RDBMS — Relational Database Management System),SQL 是基于关系型数据模型设计的数据库,SQL用二维表格表示实体以及实体之间的关系,对数据的操作也几乎全部建立在一个或多个关系表格上,通过对这些关联的表格分组、合并、连接、选取等运算来实现数据库的管理。
常见的关系型数据库有:
- Orcale
- MySQL
- Microsoft SQL server
- PostgreSQL
- SQLLite
- MariaDB
关系型数据库特点
事务性
关系型数据库都很好的支持事务性,并满足ACID特性
A:原子性(Atomicity),一个事务中的所有操作,或者全部完成,或者全部不完成
C:一致性(Consistency),在事务开始之前和事务结束以后,数据库的完整性没有被破坏
I:事务隔离(Isolation),数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致
D:持久性(Durability):事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失
规范化
关系型数据设计的时候需要遵循的三大范式
第一范式:确保每列保持原子性
第二范式:确保表中的每列都和主键相关
第三范式:确保每列都和主键列直接相关,而不是间接相关
查询语言
关系型数据库采用结构化查询语言(即SQL)来对数据库进行查询,SQL早已获得了各个数据库厂商的支持,成为数据库行业的标准,它能够支持数据库的CRUD(增加,查询,更新,删除)操作,具有非常强大的功能,SQL可以采用类似索引的方法来加快查询操作。
存储结构
关系型数据库按照结构化的方法存储数据,每个数据表都必须对各个字段定义好(也就是先定义好表的结构),再根据表的结构存入数据,这样做的好处就是由于数据的形式和内容在存入数据之前就已经定义好了,所以整个数据表的可靠性和稳定性都比较高,但带来的问题就是一旦存入数据后,如果需要修改数据表的结构就会十分困难。关系型数据库的行存储的结构下,某些数据类型和NULL值也会造成空间浪费。
扩展方式
由于关系型数据库将数据存储在数据表中,数据操作的瓶颈出现在多张数据表的操作中,而且数据表越多这个问题越严重,如果要缓解这个问题,只能提高处理能力,也就是选择速度更快性能更高的计算机,这样的方法虽然可以一定的拓展空间,但这样的拓展空间一定有非常有限的,也就是关系型数据库只具备纵向扩展能力。
读写性能
关系型数据库十分强调数据的一致性,并为此降低读写性能付出了巨大的代价,虽然关系型数据库存储数据和处理数据的可靠性很不错,但一旦面对海量数据的处理的时候效率就会变得很差,特别是遇到高并发读写的时候性能就会下降的非常厉害。
数据类型
关系型数据库支持的数据类型也比较简单,比如对文档类型如JSON、XML、PDF等,或者媒体文件比如图片、视频等格式数据的存储、查询、处理等支持很差。
灵活性
关系型数据库的结构化存储要求所有的数据都要有严格的表和字段定义,无法很好支持没有固定字段的场景
NoSQL
NoSQL即非关系型(Non-Relational),也有说是不仅仅是SQL(Not Only SQL)。互联网应用有着高并发读写、海量数据处理、数据结构不统一等特点,传统的关系数据库并不能很好地支持这些场景,就出现了NoSQL,没有明确的定义,但是一般都具有不支持事务、高并发读写、数据高可用性、海量数据存储和实时分析等特点。
常见的NoSQL有以下五类:
键值数据库
键值数据库(Key–value database)将数据存储为键值对集合,键作为唯一标识符,键和值都可以是从简单对象到复杂对象的任何内容,是一种最简单的NoSQL数据库,具有较高的容错性和可扩展性。该类数据库一般没有事务或者不能完全地支持ACID特性。
常见的键值数据库有:
- Redis
- Memcached
- etcd
- LevelDB
- Encache
搜索引擎
搜索引擎数据库(Search Engine)是一类专门用于数据内容搜索的非关系数据库。搜索引擎数据库使用索引对数据中的相似特征进行归类,并提高搜索能力。搜索引擎数据库经过优化,以处理可能很长、半结构化或非结构化的数据,它们通常提供专业的方法,例如全文搜索、复杂搜索表达式和搜索结果排名。
常见的搜索引擎:
- Elasticsearch
- Splunk
- Solr
- Sphinx
文档数据库
文档数据库(Document-Oriented Database)是用来管理文档的。在传统数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的基本单位。比如常见的文档格式有XML、YAML、JSON、BSON、PDF、Word 等。
常见的文档数据库:
- MongoDB
- Amazon DynamoDB
- Microsoft Azure Cosmos DB
- CouchDB
列簇式数据库
列簇式数据库或宽列式存储(wide column store)中数据表示为多维映射,列被分组为列族(通常存储相同类型的数据),并且在每个列族中,数据被逐行存储。此布局最适合存储由一个键或一组键来检索的数据。传统数据库有列数的限制,而列簇式数据库通过列簇的概念来降低这一限制。列簇式数据库不应与面向列的数据库相混淆。
常见的列簇式数据库:
- Cassandra
- HBase
- Microsoft Azure Cosmos DB
图数据库
图数据库(Graph database)是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。
常见的图数据库:
- Neo4j
- Microsoft Azure Cosmos DB
- ArangoDB
- Virtuoso
NewSQL
NewSQL是各种具有分布式可扩展功能的数据库的简称,NewSQL继承了NoSQL对海量数据的处理能力,同时还保持了传统关系型数据库对SQL和ACID事务的支持。NewSQL的关注重点在于混合式数据库,更倾向于找寻不再区分OLTP和OLAP查询的多模式数据库构建方案。
NewSQL就是要在SQL的基础上像NoSQL一样做分片,通过分片将数据或计算打散到不同的节点,来摆脱单机硬件对容量和计算能力的限制,从而获得更高的可用性、性能以及弹性。常见的有两种实现方案,数据库访问中间件和原生分布式数据库。
数据库访问中间件
数据库访问中间件(分布分表),是新型分布式数据库的过度阶段。常见的数据库访问中间件有两种形式:客户端程序库和数据库代理服务中间件。
常见的客户端程序库:
- TDDL
- sharding-jdbc
- MySQL Fabric
常见的数据库代理服务中间件:
- MyCat
- Cobar
- TDSQL
- MySQL-proxy
原生分布式数据库
原生分布式数据库是指从架构设计、底层存储和查询处理均面向分布式数据管理需求,数据库集群作为一个整体对外提供服务,用户无需关注集群内部的实现细节。
常见的原生分布式数据库:
- Spanner
- F1
- OceanBase
- TiDB
- SequoiaDB