一、关系型数据库:
关系型数据库是指采用了关系模型来组织数据的数据库。关系模型指的是二维(行和列)表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。
1、优点:
1>容易理解,数据直观:二维表结构是非常贴近逻辑世界的一个概念,用二维表存储数据相对网状、层次等其他模型来说更容易理解;
2>易于维护:丰富的完整性(实体完整性、域完整性、参照完整性和用户定义的完整性)大大减低了数据冗余和数据不一致的概率。数据库事务必须具备ACID特性,即:Atomic原子性,Consistency一致性,Isolation隔离性,Durability持久性;
3>使用方便:通用的SQL语言使得操作关系型数据库非常方便,更可以使用复杂的SQL进行一些复杂操作。
2、缺点:
1>固定的表结构,灵活度不够,每次新增字段时,都需要修改表结构;
2>由于数据存储在硬盘上,读写性能差。尤其是高并发下的读写或者对海量数据进行查询时,磁盘I/O是一个很大的瓶颈;
当今十大主流的关系型数据库:Oracle,Microsoft SQL Server,MySQL,PostgreSQL,DB2,Microsoft Access,SQLite,Teradata,MariaDB(MySQL的一个分支),SAP。
二、非关系型数据库:
也叫缓存数据库或NoSql,是将数据以键值对存储,且结构不固定地存储在缓存中。缓存的读取速度快,能够大大提高查询效率。非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等。
1、优点:
1>格式灵活:存储数据的格式可以是key:value形式、文档形式、图片形式等等。使用灵活,应用场景广泛;
2>速度快:NoSql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
3>高扩展性;
4>成本低:NoSql数据库部署简单,基本都是开源软件。
2、缺点:
1>不提供sql支持,学习和使用成本较高;
2>无事务处理;
3>只适合存储较简单的数据。
3、分类:
根据结构以及应用场合的不同,主要分为以下几类:
1>面向高性能并发读写的key-value数据库:
Key-value数据库是一种以键值对存储数据的数据库,类似数据结构中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个值。key-value数据库的主要特点是具有极高的并发读写性能。
主流代表为Redis, Memcached,Amazon DynamoDB, Microsoft Azure Cosmos DB和Hazelcast。
2>面向海量数据访问的文档数据库:
文档存储通常使用内部表示法,可以直接在应用程序中处理,主要是JSON。JSON文档也可以作为纯文本存储在key-value数据库或关系数据库中。文档数据库的主要特点是在海量的数据中可以快速的查询数据 。
主流代表为MongoDB,Amazon DynamoDB,Couchbase,Microsoft Azure Cosmos DB和CouchDB。
3>面向搜索数据内容的搜索引擎:
搜索引擎是专门用于搜索数据内容的NoSQL数据库管理系统。主要是用于对海量数据进行实时的处理和分析处理,可用于机器学习和数据挖掘。
主流代表为Elasticsearch,Splunk,Solr,MarkLogic和Sphinx。
4>面向可扩展性的分布式数据库:
这类数据库的
关系型数据库都是以行为单位来存储数据的,擅长以行为单位的读入处理,比如特定条件数据的获取。因此,关系型数据库也被成为面向行的数据库。相反,面向列的数据库是以列为单位来存储数据的,擅长以列为单位读入数据。
分布式数据库想解决的问题就是关系型数据库存在可扩展性上的缺陷。分布式数据库可以适应数据量的增加以及数据结构的变化,将数据存储在记录中,能够容纳大量动态列。由于列名和记录键不是固定的,并且由于记录可能有数十亿列,因此可扩展性存储可以看作是二维键值存储,具有很强的可拓展性。
主流代表为Cassandra,HBase,Microsoft Azure Cosmos DB,Datastax Enterprise和Accumulo。