Skip to main content

常用的数据库及分类

数据库 (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)数据库、列存储数据库、面向文档数据库、图形数据库、搜索引擎数据库等。

  • 键值存储数据库:使用简单键值来存储数据的数据库。将数据存储为键值对集合,其中键作为唯一标识符。常见的有:

  • 列存储数据库:传统的行存储数据,读取时通常将一行数据完全读出,如果只需其中几列数据,就会存在冗余列;而列存储每次读取的数据是集合的一段或全部,不存在冗余性问题,使查询性能得到极大的提升。常见的有:

    • HBase
  • 面向文档数据库:可存放并获取 XML、JSON、BSON 等格式的文档,文档数据库所存放的文档,就相当于键值数据库所存放的“值”,文档数据库可视为其值可查的键值数据库。常见的有:

  • 图形数据库:存储图形关系的数据库,应用图形理论存储实体之间的关系信息。常见的有:

    • 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(非关系型)
数据规模★★★★☆☆☆
随机读取★★★★★★★
顺序读取★★★★★★★
随机写入☆☆☆☆★★★
顺序写入★★★★★★★
检索功能☆☆★★☆☆☆
关联查询★★★☆☆☆☆☆
硬件要求
事务支持ACIDACID9ACID8
CS架构
主键索引支持支持支持
二级索引支持支持不支持

1、MySQL or MongoDB

MySQL 适用于:

  • 注重安全性;
  • 数据结构稳定;

例如会计或银行系统。

MongoDB 适用于:

  • 处理大量数据;
  • 数据结构不固定;

例如云计算服务(具备云服务需要的水平可伸缩性和灵活性)

2、Redis or MongoDB

Redis 适用于:

  • TPS(事务数/秒)要求高,高并发;

适用于数据量较小但操作频繁的场景,如点赞、直播弹幕。

MongoDB 适用于:

  • 处理大量数据;

例如推送、评论。