常用的数据库及分类
数据库 (Database,DB) 是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。根据数据结构可分为
关系型数据库
和非关系型数据库
。
一、关系型数据库
关系型数据库(Relational database)是把复杂的数据结构归结为简单的二元关系(即二维表格形式)
在关系型数据库中,对数据的操作建立在一个或多个关系表格上。在大型系统中通常有多个表,且表之间有各种关系。实际使用就是通过对这些关联的表格分类、合并、连接或选取等运算来实现数据库的管理。
常见的关系型数据库:
1、MySQL
MySQL 是一款开放源代码的关系型数据库管理系统。因为其速度、可靠性和适应性而备受关注。在 WEB 应用方面,MySQL 是最好的应用软件之一。
开放源码,自主性强、使用成本低。 体积小,安装使用简单,易于维护。 性能卓越,服务稳定;且支持多种操作系统。
优势:
- 开放源码,自主性强、使用成本低;
- 体积小,安装使用简单,易于维护;
- 性能卓越,服务稳定,且支持多种操作系统。
劣势:
- 规模小,功能有限;
- 数据量大时处理性能不及 Oracle。
2、Oracle
Oracle 是目前世界上流行的关系型数据库之一,是一种高效率、可靠性好、适应高吞吐量的数据库方案。
优势:
- 能在所有主流平台上运行;
- 性能高,保持开放平台下 TPC-D 和 TPC-C 世界记录;
- 获得最高认证级别—— ISO 标准认证,安全性高。
劣势:
- 价格昂贵。
3、SQL Server
该数据库属于B/S结构,主要应用于大型的管理系统中。它提供了丰富的编程接口工具,拥有更大的选择余地。
优势:
- 真正的客户机/服务器体系结构;
- 图形化的用户界面,使系统管理和数据库管理更加直观、简单;
- 丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地;
- 与 WinNT 完全集成,利用了 NT 的许多功能,如发送和接受消息,管理登录安全性等,SQL Server 也可以很好地与 Microsoft BackOffice 产品集成;
- 提供数据仓库功能,这个功能只在 Oracle 和其他昂贵的 DBMS 中才有。
劣势:
- 只能在 Windows 下运行。
4、PostgreSQL
PostgreSQL 是一个免费的对象-关系数据库服务器 (ORDBMS),在灵活的 BSD 许可证下发行。
优势:
- 稳定性极强,Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步;
- 性能高速度快。任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG 的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降;
- 多年来在 GIS 领域处于优势地位,有丰富的几何类型和大量字典、数组、bitmap 等数据类型;
- 是唯一支持事务、子查询、多版本并行控制系统、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统;
- 对数据量大的文本以及 SQL 处理较快。
二、非关系型数据库
非关系型数据库(NoSQL)根据应用场景又可分为键值(Key-Value)数据库、列存储数据库、面向文档数据库、图形数据库、搜索引擎数据库等。
键值存储数据库:使用简单键值来存储数据的数据库。将数据存储为键值对集合,其中键作为唯一标识符。常见的有:
- Redis
- Memcached
列存储数据库:传统的行存储数据,读取时通常将一行数据完全读出,如果只需其中几列数据,就会存在冗余列;而列存储每次读取的数据是集合的一段或全部,不存在冗余性问题,使查询性能得到极大的提升。常见的有:
- HBase
面向文档数据库:可存放并获取 XML、JSON、BSON 等格式的文档,文档数据库所存放的文档,就相当于键值数据库所存放的“值”,文档数据库可视为其值可查的键值数据库。常见的有:
- MongoDB
- CouchDB
图形数据库:存储图形关系的数据库,应用图形理论存储实体之间的关系信息。常见的有:
- Neo4J
- InfoGrid
搜索引擎存储:应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。常见的有:
1、MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。而且还是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
优势:
- 弱一致性(最终一致),更能保证用户的访问速度;
- 查询与索引方式灵活,是最像 SQL 的 NoSQL;
- 内置 GridFS,支持大容量的存储;
- 内置 Sharding,支持复制集、主备、互为主备、自动分片等特性;
- 第三方支持丰富;
- 性能优越;
劣势:
- 单机可靠性比较差;
- 磁盘空间占用比较大;
- 大数据量持续插入,写入性能有较大波动。
2、Redis
Redis(REmote DIctionary Server)是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
优势:
- 支持内存缓存,这个功能相当于 Memcached;
- 支持持久化存储,这个功能相当于 MemcacheDb,ttserver;
- 数据类型更丰富。比其他 key-value 库功能更强;
- 支持主从集群,分布式;
- 支持队列等特殊功能。
3、Elasticsearch
优势:
- Elasticsearch 兼容在每个平台上运行,因为它是用 Java 开发的;
- 它是一个实时搜索引擎,这意味着只有一秒钟之前添加的文档可以在这个引擎中搜索;
- Elasticsearch 提供了网关的概念,可以轻松创建完整备份;
- 它是面向分布式文档的,易于在大型组织中扩展。开发人员可以通过扩展它轻松地将其集成到任何大型组织中;
- 与 Apache Solr 相比,在 Elasticsearch 中可以轻松处理多租户;
- 支持所有文档类型(不支持文本渲染的除外)
劣势:
- Elasticsearch 中可能会出现脑裂问题;
- 与 Apache Solr 不同,Elasticsearch 不支持处理请求和响应数据的多语言;
- 与 MongoDB、Hadoop 等其他选项相比,Elasticsearch 不是一个很好的数据存储。它在小型用例中表现良好,但在每天传输 TB 数据的情况下,它要么阻塞,要么丢失数据;
- 是一个灵活而强大的数据存储搜索引擎,但学习成本较高。尤其是在企业搜索使用方面,它并不像开箱即用的搜索那么简单。
三、总结
项目 | MySQL(关系型) | MongoDB(非关系型) | Redis(非关系型) |
---|---|---|---|
数据规模 | ★★☆ | ★★☆ | ☆☆☆ |
随机读取 | ★★☆ | ★★☆ | ★★★ |
顺序读取 | ★★☆ | ★★☆ | ★★★ |
随机写入 | ★☆☆ | ★☆☆ | ★★★ |
顺序写入 | ★★☆ | ★★☆ | ★★★ |
检索功能 | ★☆☆ | ★★☆ | ☆☆☆ |
关联查询 | ★★★ | ★☆☆ | ☆☆☆ |
硬件要求 | 低 | 中 | 低 |
事务支持 | ACID | ACID9 | ACID8 |
CS架构 | 是 | 是 | 是 |
主键索引 | 支持 | 支持 | 支持 |
二级索引 | 支持 | 支持 | 不支持 |
1、MySQL or MongoDB
MySQL 适用于:
- 注重安全性;
- 数据结构稳定;
例如会计或银行系统。
MongoDB 适用于:
- 处理大量数据;
- 数据结构不固定;
例如云计算服务(具备云服务需要的水平可伸缩性和灵活性)
2、Redis or MongoDB
Redis 适用于:
- TPS(事务数/秒)要求高,高并发;
适用于数据量较小但操作频繁的场景,如点赞、直播弹幕。
MongoDB 适用于:
- 处理大量数据;
例如推送、评论。