除了 MySQL 数据库,你还要了解的一些数据库

数据库
数据库的选型,在我架构过程中也是重中之重。什么场景适合合适什么数据库,每种数据库的特点是什么,在架构中起到什么样的作用,承担的重点业务是什么?

 [[424016]]

数据库是我们在项目开发过程中必不可少的一项服务。 相信技术大大也都接触过各种类型的数据库,例如Oracle、MySQL、MongoDB、Redis等大众熟知的数据库。

数据库的选型,在我架构过程中也是重中之重。什么场景适合合适什么数据库,每种数据库的特点是什么,在架构中起到什么样的作用,承担的重点业务是什么?

我们在 DB-ENGINES (https://db-engines.com/en/ranking)看到,参与排名的数据库就多达354种。如下图,这里2021年7月的一个数据库排名供参考。

所以,本篇文章主要是科普一些常用的或者热门的数据库供大家了解,在以后选用数据库的时候也可以多方面考虑,选用适合的业务场景的数据库。

人的精力有限,我们不需要清楚每一种数据库里的细节,但是我们可以根据我们业务的使用场景,选择合适范围的数据库,再针对性的进行分析和选择。

数据库按类型可分为以下几类:

  • 关系型数据库

  • 文档型数据库

  • Key-Value数据库

  • 图数据库

  • 时序数据库

  • 检索型数据库

  • 列存储数据库

根据类型,我们简单的介绍一下我们经常使用、关注或者常见的数据库。

关系型数据库

关系型数据库模型是将复杂的数据结构以行和列的形式进行存储,类似于Excel表格的数据形式。在关系型数据中,对数据的操作几乎都是建立在一个或多个关系表的基础上进行的。通过表的关系来实现数据库的管理。典型的数据库有 Oracle 、 MySQL 等。Oracle、MySQL都是当下最流行的关系型数据,从上面排名可以看出,两都常年居于排行榜Top 2。

Oracle 是甲骨文公司的一款关系型数据库管理系统,它在数据库领域一直处于领先地位的产品,是一种高效率、可靠性好、高吞吐量的数据库解决方案。Oracle的高性能、高可能、可靠性是毋庸置疑的,早些年时,世界500强几乎都选用的Oracle,当然,Oracle是收费的软件。

MySQL 是开放的源码软件,相比Oracle,它可以大大降低成本。MySQL 原开发者为瑞典的MySQL AB公司,在2008年被 Sun Microsystems收购,并于2009年被甲骨文公司收购,成为Oracle旗下产品。目前MySQL有收费的企业版和免费的社区版。对于一般的个人用户或者中小型企业来说,MySQL提供的功能已经绰绰有余。当年,LAMP(LNMP)架构风靡互联网,MySQL在其中扮演了重要角色。

除此之外,PostgreSQL、OceanDB、TiDB、SQL Server、SQLite等属于关系型数据库。 PostgreSQL 是以加州大学伯克利分校计算机开发的Postgres 为基础的对象关系型数据库管理系统,在灵活的BSD许可证下发行,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。

OceanDB 是阿里巴巴和蚂蚁金服100%自主研发的金融级分布式关系数据库,在普通硬件上实现金融级高可用。

TiDB 是PingCAP公司自主设计、研发的开源分布式关系型数据库,是一款同时支持在线事务处理与在线分析处理的融合型分布式数据库产品。适合高可用、强一致性要求较高、数据规模大等应用场景。

MicroSoftSQLServer 相信大家都不陌生,是由微软公司推出的关系数据库解决方案。它的几个初始版本适用于中小企业的数据管理,近年来应用范围有所扩展,已经触及到大型、跨国企业的数据管理。

SQLite 是遵守ACID的关系数据库管理系统,但不同的是,它不是一个客户端/服务器结构的数据库,而是被集成在了用户程序中。

关系型数据库经过几十年的发展后已经非常成熟,强大的SQL功能和ACID的属性使得关系数据库广泛应用于各行各业的系统中,但这并不意味着关系型数据库就是完美无缺的,例如:

  • 关系数据库是行存储,无法存储数据结构

  • 关系数据库的schema是强约束,扩展不方便

  • 在大数据场景下I/O较高

  • 全文检索功能弱

因此,针对关系型数据库的弱点,也就诞生了不同的NoSQL解决方案,NoSQL 可以作为SQL的一个有力的辅助方案,NoSQL != Not SQL,而是Not Only SQL。

文档型数据库

文档型数据库主要解决关系数据库强schema约束的问题,其最大特点就是no-schema,可以存储或读取任意的数据。大部分文档型数据库存储的数据格式是JSON或者BSON,其主要优势在于:

  • 新增字段简单,无须像SQL一样先执行DDL语句修改表结构。

  • 历史数据兼容性强,即使没有新增字段,也不会导致出错,在代码层面做好兼容性即可。

  • 可以存储复杂的数据结构,相对SQL更简便。

当然,文档型数据库的优势也是有代价的,最主要的就是不支持事务,在某些强事务性的应用场景就不适用了。另外一个缺点就是无法使用join操作。因此需要在程序层面来实现相应的业务。以MongoDB为代表。

文档型数据库以MongoDB、CouchDB为代表。 MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。2015 年 12 月,在发布的 3.2 版本中,在 MongoDB 的聚合框架(Aggregation)中增加了一个不起眼的操作符: $lookup,同时也开启了支持关系数据库的核心功能:关联。2018年6月,MongoDB推出ACID事务支持,成为第一个支持强事务的NoSQL数据库。

key-value型数据库

提到K-V存储型数据库,大家第一时间想到的NoSQL可能就要数Redis或Memcache了。它主要解决了关系数据库无法存储数据结构的问题,具有极高的读写并发能力。K-V数据库并不支持完整的ACID事务。在高访问量的系统中,我们一般首选会用到redis或者Memcache来做数据缓存,缓解数据库的压力,提升网站或应用的响应速度。

以Redis为例,Redis是K-V型数据库的典型代表,Redis的Value是具体的数据结构,我们常用的有五种,包括字符串、散列、列表、集合、有序集合,随着Redis的不断更新,数据结构也增加了HyperLogLog、位图、流、地理坐标等丰富的数据结构,每种数据结构都适用于解决一些特殊场景的问题。比如热点数据缓存、计数器、排行榜、队列、分布式缓存等。不同于Memcache,Redis也支持持久化,支持RDB模式、AOF模式以及RDB-AOF混合模式(从4.0开始支持)。

这里再介绍一下另一个KV型数据库——Etcd。etcd是一种开源的分布式统一键值存储,用于分布式系统或计算机集群的共享配置、服务发现和调度协调。有助力于促进更加安全的自动更新,协调向主机调度工作,并帮助设置容器的覆盖网络。

图数据库

图数据库(英语:graph database,GDB[1])是一个使用图结构进行语义查询的数据库,它使用节点、边和属性来表示和存储数据。该系统的关键概念是图,它直接将存储中的数据项,与数据节点和节点间表示关系的边的集合相关联。这些关系允许直接将存储区中的数据链接在一起,并且在许多情况下,可以通过一个操作进行检索。图数据库将数据之间的关系作为优先级。查询图数据库中的关系很快,因为它们永久存储在数据库本身中。可以使用图数据库直观地显示关系,使其对于高度互连的数据非常有用。【摘自维基百科】

随着社交、电商、金融、物联网的快速发展,图数据库的应用也越来越广泛,例如金融行业风控、反欺诈应用,社交场景的关系图谱,电商领域的商品推荐实现精准营销等。

Neo4j是由Java实现的开源图数据库,支持ACID、集群、备份和故障转移。可以使用其内置的REST WEB API接口从大多数编程语言访问,以及使用官方程序的专有Bolt协议。

从图数据库的排名上也能看出,Neo4j是目前市场上最受欢迎的图数据库之一。

时序数据库

时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据。

时间序列数据主要由电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、严重依赖于采集时间(每一条数据均要求对应唯一的时间)、测点多信息量大(常规的实时监测系统均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。【摘自百度百科】

目前从 DB-ENGINES 能看出来,InfluxDB比较火爆。

InfluxDB是一个由InfluxData开发的开源时序型数据库,它是由Go编写,着力于高性能地查询和存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

检索型数据库

搜索是我们项目中必不可少的功能之一。传统的关系型数据库通过索引来达到快速查询的目的,但是在全文搜索的业务场景下,索引也是无效的。比如用like查询是整表扫描,效率很低。而我们经常会用到的搜索引擎有Sphinx、Solr、Elasticsearch等。他们支持复杂的搜索表达式、全文搜索、词干分析、搜索结果的排序与分组等,并且相对关系型数据库来说有很大的性能优势。

列存储数据库

列式数据库就是按照列来存储数据的数据库,而我们经常用到的关系型数据库则被称为“行式数据库”。宽列存储,也称为可扩展记录存储,将数据存储在记录中,能够保存大量动态列。由于列名和记录键不是固定的,而且记录可以有数十亿列,因此宽列存储可以看作是二维键值存储。

列式数据库主要解决关系数据库大数据场景下的I/O问题,以HBase、Cassandra为代表。

写在最后

没有最好的数据库,只有最合适的数据库。项目在选用数据库时,肯定是结合自己的业务特点,架构选择、成本等多方面因素综合考虑的。同时也不要局限在自己熟悉的数据库,不能因为熟悉MySQL,不管实际业务场景和特点,全部使用MySQL。

 

责任编辑:张燕妮 来源: 西梧Runtime
相关推荐

2020-08-07 08:04:03

数据库MySQL技术

2011-07-29 15:58:53

SGAOracle

2018-06-21 14:50:00

2010-05-21 13:34:53

MySQL数据库

2011-03-10 13:19:47

Oracle数据库

2010-05-12 15:41:21

MySQL数据库

2010-05-18 10:47:52

2011-08-01 13:59:22

Oracle数据库命名空间

2011-08-15 14:52:07

数据库登录名数据库用户名

2021-03-11 10:49:27

数据管理

2018-10-16 16:00:39

数据库锁舞MySQL

2020-07-10 06:11:19

数据库扩展负载

2018-07-27 18:20:31

数据库MySQL 数据库建表

2011-08-03 17:43:53

MySQL数据库外键约束

2010-08-25 14:32:49

DB2数据库迁移

2010-05-26 17:40:14

MySQL数据库

2011-03-21 13:41:20

数据库开发规范

2021-09-07 10:12:25

分布式数据库集群

2011-08-25 14:50:42

SQL Server数常用操作

2011-09-01 15:39:43

QT数据库
点赞
收藏

51CTO技术栈公众号