查看原文
其他

除了关系型数据库外,还有好几种数据库类型呢

码农参上 2023-11-23

The following article is from 古时的风筝 Author 风筝

一说到数据库,大多数人可能像我一样,首先想到的就是 MySQL、Oracle 这样的关系型数据库。因为我们平时接触的最多,而且大学课程中有关于数据库的,也是以关系型数据库为主的。

其实,除了关系型数据库外,还有其他类型的用作数据存储的结构,也可以叫做数据库。有些我们平时也经常用到,有的呢,需要做到具体的业务才会接触。

接下来,我们就总结一下到底有哪些数据库类型。


关系型数据库

像MySQL、PostgreSQL、Oracle 都是关系型数据库,在关系型数据库中,表和表之间是存在关系的。例如用户表和订单表这两张表,订单表中一般会有一个用户ID的字段,用来表示这个订单是哪个用户产生的。

在关系型数据库中,一个表中,包含多个列(字段),每一个列都有指定的字段类型。每一条记录就是一行。

关系型数据库通常遵循ACID属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),以确保数据在各种情况下都能够保持正确状态。

在关系型数据库中,我们才会用到 SQL 语句,使用各种各样的关键字、规则等,用来实现各种各样的业务操作。

Key-Value 型数据库

Key-Value 型的数据库中我们最熟悉的就是 Redis了。这是一种 NoSQL,这种类型的数据库结构比较简单,就是一个键对应一个值,当然,值的类型可能有很多。

由于结构简单,所以这种类型的存储可以有很高的读取写入速度,所以对读写性能要求比较高的环境可以用 key-value型的数据库。

通过 Redis 的使用场景,我们也能知道,这种数据库多用来做内存型数据库,处理高并发场景,例如应用缓存。

文档型数据库

同样是一种 NoSQL,这里所说的文档指的是结构化的数据,例如 JSON或 XML,最熟悉的就是 MongoDB了,它以 JSON 作为存储数据的格式。

我们平时在开发接口的时候,传给前端的都是 JSON 数据。使用文档型数据库,你就可以把传给前端的JSON内容直接存到数据库中,这样的一条记录叫做一个 Document。

例如一个商品详情页,商品的属性有很多,关联的内容也有很多,我们可以把这些内容直接存储成一个 Document。

不同的商品种类有不同的属性,例如电脑和书的属性大相径庭,对应的它们的属性字段也就不一样,不光是属性的值不一样,连属性的个数都不一样,对于这种结构多样性的数据,用文档型数据库就最合适了。

纵列数据库

大多数数据库都是按行存储的,一行包括多个字段。而纵列数据库呢,是按列存储的。

这样一来,每一列都是一个独立的数据结构。带来的好处就是,我们可以选择性的获取某一列或某几列数据,查询读取的速度是非常快的。

纵列数据库适用于需要对一组列进行聚合、筛选和计算的分析查询,应用于大数据量的场景。

所以,纵列数据库常见于一些大型的数据仓库,平时如果业务不涉及的话, 我们很难接触到。

图数据库

图数据库以图(Graph)的形式来表示数据,并且强调数据之间的关系和连接。图数据库适用于需要处理复杂的关系和连接的应用场景,例如社交网络分析、推荐系统、知识图谱、地理信息系统等。

图数据库允许在节点、边和属性之间建立复杂的关系,这使得它们能够有效地处理大量的关联数据。

图数据库这种特殊的结构非常适合复杂关系的查询,例如查找两个节点之间的最短路径、查找共同的邻居等。结合到社交网络中来看,可以查询两个人的共同好友、共同关注等等。

比较流行的图数据库有 Neo4jAmazon Neptune等。

时间序列数据库

时间序列数据库是一种专门用于存储、管理和分析时间相关数据的数据库类型。它们专注于处理时间序列数据,这是一系列按时间顺序排列的数据点或事件,通常在相等的时间间隔内采集。时间序列数据库适用于各种应用场景,如监测、传感器数据、金融数据、日志记录、网络流量分析等。

时间序列数据库以时间作为主要的索引方式,而且写入性能极高。就拿传感器和日志来说,这些都是高频操作,一个流量高的系统,每天产生的日志量是非常大的,所以必须要快,不快就麻烦了。

我们的系统中通常都会有日志监控平台,比如 Grafana ,有各种指标图表,以及方便的检索方式, Grafana 是一个可视化的平台,需要接入数据源,而数据源一般就是时间序列数据库,例如 InfluxDB。


精选推荐


1.从实现到原理,聊聊Java中SPI动态扩展

2.魔改xxl-job,彻底告别手动配置任务!

3.基于Spring接口,集成Caffeine+Redis两级缓存

4.5道面试题,拿捏String底层原理!

5.动图图解GC算法 - 让垃圾回收动起来!

6.简化本地Feign调用,老手教你这么玩


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存