你是小阿巴,正在公司敲代码。
老板走过来说:小阿巴,给咱们网站加个商品搜索功能吧。
你拍拍胸脯:没问题,我直接用 MySQL 数据库的 LIKE 模糊查询实现搜索,1 小时上线~
![]()
结果上线后,用户点击搜索,卡了半天没反应,老板气得脸都绿了。
你急的汗流浃背,只能找到号称『后端之狗』的鱼皮求助:阿巴阿巴,俺用 MySQL 搞不定,咋办啊……
鱼皮:不是哥们,又不是只有 MySQL 这一个数据库。
下面我来带你认识 10 种不同类型的数据库,让你知道什么场景该用什么数据库。
![]()
点个收藏,我们开始~
⭐️ 推荐观看视频版,有动画更好理解:https://www.bilibili.com/video/BV1ChkjBsEzq
关系型数据库
首先是我们接触最多的、也是后端入门必学的 关系型数据库。
在关系型数据库中,数据以 表 的形式进行组织和存储,每个表就像一个 Excel 表格,包含多个 行 和多个 列。
![]()
比如你要做个学生管理系统,把学生信息存储到关系型数据库中,结构大概是这样的:
学号
学生姓名
所属班级号
1
小李
1
2
小鱼
2
3
小皮
3
上述学生表格中,每一行代表一个学生的信息,每一列代表学生的一个属性。
![]()
我们可以使用结构化查询语言 SQL 来对关系型数据库表的数据进行灵活地查询、选择、过滤等。
![]()
而关系型数据库最大的特点,就是表和表之间可以 存在关系。比如学生管理系统中还可以有班级表,结构如下:
班号
班级名称
1
快乐班
2
泰酷班
3
躺平班
如果我想知道某个学生所属的班级信息,只需要在查询时将学生表的 所属班级号 和班级表的 班号 进行关联,而不用把所有表格的列存储在一起,非常灵活。
![]()
通过 SQL 可以连接查询多张表:
![]()
得到下面的查询结果:
学号
学生姓名
所属班级号
班级名称
1
小李
1
快乐班
2
小鱼
2
泰酷班
3
小皮
3
躺平班
此外,关系型数据库遵循 ACID 原则(原子性、一致性、隔离性和持久性),通过 事务 机制可以保证多个操作同时进行时,数据的状态保持一致。
![]()
举个例子,A 给 B 转账,A 扣钱的同时 B 也会加钱,不会出现 A 扣了钱 B 却没收到钱的情况。
![]()
正因为关系型数据库既能灵活查询、又能准确写入,所以它几乎可以被应用在任何项目中。比如各类管理系统、数据分析系统、金融银行系统等。
比较主流的关系型数据库产品有:
MySQL:开源易学,后端开发必学的数据库
Oracle:人称 “甲方的数据库”,主要是大型企业和政府机构在用,功能强大但授权费用昂贵
PostgreSQL:开源界的天花板,功能最全面
SQL Server:微软出品,和 Windows 系统、.NET 生态集成度高
SQLite:整个数据库就是一个文件,不需要服务器,非常轻量。被广泛应用在手机 APP、浏览器中,你的手机里可能有几十个 SQLite。
对于大多数项目,用 MySQL 等关系型数据库来存储数据就足够了。但如果要存储的数据间没有复杂关系、或者需要极致的性能时,它并不是最佳选择。
你点点头:俺知道,就好比俺要写一篇文章,没必要非得把内容塞进 Excel 表格里,直接放到 Word 文档里会更方便编辑和阅读。
![]()
鱼皮:没错,这时就需要与关系型数据库互补的 非关系型数据库。
非关系型数据库
非关系型数据库又叫 NoSQL(Not Only SQL),适合存储关系不强的、结构灵活的、需要快速访问的数据。
打个比方,关系型数据库像图书馆,书籍分类明确、摆放有序、借阅有规矩;非关系型数据库像你的书桌,怎么顺手怎么放,拿取方便最重要。
![]()
在实际项目开发中,最常用的非关系型数据库是 KV 数据库和文档数据库。
KV 键值数据库
KV 即 Key-Value,数据是以 键值对 的方式存储在数据库中的,可以理解为一个超大的 HashMap,数据库中存储的每个键都 唯一对应 一个值。
![]()
比如存储用户信息和热门商品信息,结构是这样的:
Key 键
Value 值
user:1001
{"name":"鱼皮", "age":25}
product:hot
["商品1", "商品2", "商品3"]
键和值都可以是任意类型的数据,包括字符串、数字、数组、JSON 对象等,非常灵活。
![]()
由于 KV 存储的结构简单清晰,我们能够很轻松地根据某个键查找出对应的值,就像查字典一样,读写数据的性能都非常高。
![]()
此外,KV 数据库的可扩展性很强。因为数据间不存在直接关联,我们可以把键值对分散到多台机器上存储,通过数据分片、负载均衡等策略来支持海量数据的高并发访问。
![]()
由于高性能和高可扩展性,KV 数据库被广泛应用于缓存、分布式会话、分布式锁、实时统计等场景。
最经典的 KV 数据库肯定是 Redis,它是开源的、基于内存的数据库,不仅支持丰富的数据类型和功能,还有持久化等重要特性,也是后端必学的技术。其他的常用 KV 数据库有 Memcached、Etcd、LevelDB、RocksDB 等。
![]()
文档数据库
文档数据库也属于非关系型数据库。顾名思义,它适用于存储和管理 半结构化的 文档数据,数据一般以 JSON(BSON)格式存储。
![]()
相比于关系型数据库中严格定义的表格行列,文档数据库的数据结构更像是一份份独立的文档,每个文档都可以包含不同类型和格式的数据,结构非常灵活。
![]()
比如存储博客文章,结构是这样的:
文档 ID
文档数据
1
{"_id": 1, "title": "文章标题1", "content": "这是文章1的内容"}
2
{"_id": 2, "title": "文章标题2", "author": "程序员鱼皮"}
你挠挠头:诶,文档 1 和文档 2 的字段都不一样啊,这也行?
![]()
鱼皮:没错,这就是文档数据库的灵活性。当我们要给某个文档新增一个字段时,不需要像关系型数据库那样先改表结构,直接加就完事了。
![]()
而且支持水平扩展,可以分散到多台服务器上存储,适用于内容管理系统、博客平台、电商商品详情页等场景。
![]()
推荐学习的文档数据库是 MongoDB,因为它存储的就是 JSON(BSON)格式数据,对前端同学很友好,入门难度也很低。
![]()
特定场景的数据库
虽然关系型和非关系型数据库已经能够满足大部分场景,但在一些特殊场景下,使用专门设计的数据库会更高效。就像你可以用菜刀砍树,但用斧子会更快更省力。
搜索引擎数据库
专门为搜索功能设计的数据库。它能存储和管理大量文本数据,提供快速、准确、灵活的全文检索功能。
![]()
你挠挠头:凭什么它能做到这些呢?
鱼皮:秘密在于它使用了 倒排索引 的方式存储数据。
以存储博客文档为例,关系型数据库的存储结构是:
文档 id
文档内容
1
感谢关注鱼皮
2
鱼皮是一名程序员
3
感谢关注编程导航
我们能够根据 id 来查找到对应的单篇文档,也可以通过搜索精确的关键词,来查找到多篇文档。
比如搜索 "鱼皮",能搜出文档 1、2。
![]()
但是,如果你搜索 "鱼皮程序员",是无法得到搜索结果的,因为没有任何一个文档的内容完全包含 "鱼皮程序员" 这个词。
![]()
而在搜索引擎数据库中,首先会将文档内容按照单词进行分割,也就是 分词。然后 建立倒排索引,也就是构建 单词到文档 id 的映射。
![]()
有了上述的倒排索引,当用户搜索 "鱼皮程序员" 时,搜索引擎数据库会先对搜索词进行分词,得到 "鱼皮" 和 "程序员",然后根据这两个词汇就能找到文档 id 1 和 2 了。不用再一行一行遍历表内所有的数据,实现了更灵活、快速的搜索。
![]()
此外,搜索引擎数据库还支持 相关性排序,能够根据用户的搜索词对所有搜索结果进行打分,把最相关的文档排到最上面,就像谷哥度娘那样。
![]()
主流的搜索引擎数据库技术有 Elasticsearch、Apache Solr 等,建议只学习 Elasticsearch 就够了,它的社区最活跃、学习资料最丰富。
向量数据库
向量数据库是专门用于存储和处理 高维向量数据 的数据库,也是 AI 时代最火的数据库。
你好奇道:啥是向量?
鱼皮:简单来说,向量是一个数字数组,每个数字代表一个 特征 维度。
![]()
举个例子,在人脸识别系统中,我们需要通过人脸的特征来判断是否为同一个人。每张人脸图像都可以通过 AI 模型转换成一个向量,这个向量可能包含成百上千个数字,每个数字代表图像的一个 抽象 特征维度。
![]()
实际上,很难说清楚每个数字代表什么,但便于理解,你可以 想象 下标 0 代表鼻子大小,下标 1 代表眼睛距离等等,以此类推。
![]()
之后通过余弦相似度等算法来计算两个向量的相似度,就能判断出两张人脸是不是同一个人。
![]()
向量数据库能够高效存储这些多维向量数据、快速计算向量的相似度、并实现各种不同算法的相似性搜索。适用于人脸识别、推荐系统、语义搜索等场景。
![]()
在 AI 时代,可以用向量数据库给 AI 提供特定领域的知识库,大大提升回答的准确性。
![]()
主流的向量数据库技术有 Milvus、Pinecone 等,像 PostgreSQL 关系型数据库也通过插件支持存储向量类型的数据。
![]()
图数据库
图数据库是专门用于存储和处理 图结构数据 的数据库。
注意,这里的 “图” 可不是照片或图表,而是数学中的图论概念,由节点(Node)和边(Edge)构成的图形结构。
![]()
比如我们要存储一个社交网络的朋友关系,对应的图可能是由多个用户节点和好友关系边组成的。
![]()
在图数据库中,需要 2 个表格来存储。
1)节点信息表:
节点 id
节点名
1
鱼皮
2
阿巴
3
编程导航
2)边信息表:
边 id
边类型
起始节点
结束节点
1
好友
1
2
2
好友
2
3
通过存储这些节点和边的信息,图数据库就能快速查询和分析复杂的关系网络。比如查找 “朋友的朋友”、计算两个用户之间的最短路径、发现社交圈子等等。
![]()
因此,图数据库非常适合构建社交网络、推荐系统、知识图谱等。
比较主流的图数据库有 Neo4j、TigerGraph 等,都支持复杂的图算法和分布式扩展,能够通过并行计算加速图形处理。
时序数据库
时序数据库是专门用于高效存储和处理 时间序列 的数据库。
时间序列是指以时间作为主要维度的数据序列,也就是每个数据单元都带着 时间戳,按时间顺序排列。
![]()
举个例子,在服务器监控系统中,我们需要每分钟记录服务器的 CPU 使用率、内存使用率等指标,数据结构如下:
时间戳
设备ID
CPU使用率
内存使用率
2026-01-08 10:00
Server001
45%
60%
2026-01-08 10:01
Server001
48%
62%
2026-01-08 10:02
Server001
52%
65%
有了这些数据,我们就能够按照时间范围进行高效查询、做聚合分析(比如计算过去 1 小时的平均 CPU 使用率)、进行数据可视化展示。
![]()
因此,时序数据库非常适用于物联网设备监控、服务器性能监控、金融交易数据分析等场景。
主流的时序数据库技术有 InfluxDB、TimescaleDB 等,一般会配合 Grafana 监控看板一起使用,实现数据存储 + 快速可视化。你在运维团队看到的那些酷炫的实时监控大屏,背后就是时序数据库在支撑。
![]()
列存数据库
区别于传统的行式数据库,列存数据库 以列作为基本的存储单位,把每一列的数据存储在一起。
拿公司每天的收入来举个例子,传统的行式数据库是这么存储的:
日期
销售额
成本
利润
2026-01-01
500
600
-100
2026-01-02
280
450
-170
2026-01-03
290
480
-190
而在列存数据库中,底层大概是这么存储的,看起来像是对矩阵做了一次转置:
日期
2026-01-01
2026-01-02
2026-01-03
销售额
500
280
290
成本
600
450
480
利润
-100
-170
-190
![]()
如果我们要统计这 3 天公司的总利润,传统的行式数据库需要依次读取每一行的数据,然后再提取出利润这一列进行计算;而列存数据库直接读取利润这一列就行了,不用管其他列,大大提高了数据分析和聚合操作的效率。
![]()
而且从计算机底层来分析,把相同类型的数据在同一列中连续存储,可以实现更好的数据压缩效果、节约存储空间。
![]()
因此,列存数据库适用于报表生成、数据仓库、商业智能分析等场景。
主流的列存数据库技术有 ClickHouse、Apache HBase、Druid 等,都是大数据开发的必修课。
融合型数据库
前面我们讲了关系型和非关系型数据库,要么强调灵活查询、要么强调性能和扩展,各有侧重。
但有些数据库偏偏 “既要又要”,要把两者的优点融合到一起,这就是接下来要讲的融合型数据库。
NewSQL 数据库
NewSQL 是一类新兴的数据库,它融合了传统关系型和非关系型数据库的优点。既有传统 SQL 数据库的 ACID 特性和事务支持,又有 NoSQL 的水平扩展能力和高性能。支持标准 SQL 查询、分布式架构、自动容错和故障恢复,可以替代传统的分库分表方案,特别适用于大厂的高并发系统。
![]()
主流的 NewSQL 数据库有 TiDB、CockroachDB、Google Spanner 等。其中 TiDB 是国产之光,支持 HTAP(混合事务分析处理),而且完全兼容 MySQL 协议,迁移成本低;CockroachDB 人称 “蟑螂数据库”,因为它像蟑螂一样顽强,集群中一个节点挂了,其他节点依然能正常服务,打不死。
![]()
多模数据库
区别于前面所有存储单一数据模型的数据库,多模数据库能够直接在一个数据库里同时存储和处理 多种不同类型 的数据。比如关系型数据、文档数据、图形数据、键值对数据等等,非常灵活、省去了维护多个数据库的麻烦。
![]()
而且多模数据库还支持跨模型事务,能够更轻松地实现数据的一致性和完整性,不需要手动实现跨库事务、跨库数据同步这些复杂操作。
![]()
虽然听起来很厉害,但实际开发中很少用,因为样样通样样松,多模数据库的性能往往不如专注单一场景的数据库。
原生的多模数据库技术有 ArangoDB、OrientDB 等,它们从设计之初就是为多模式设计的。前面也提到,虽然 PostgreSQL 这样的老牌关系型数据库可以通过丰富的插件支持多种数据类型(比如 JSON 文档、向量、地理空间数据等),但它的核心始终是关系模型,多模支持算是锦上添花,不过这也体现了 PostgreSQL 的强大。
![]()
怎么选择数据库?
你一脸懵逼:阿巴阿巴,你讲了这么多数据库,俺头都大了,到底该选哪个?
![]()
鱼皮笑了笑:别慌,数据库选型其实没那么复杂。
优先选用 MySQL / PostgreSQL + Redis,能覆盖 90% 的项目需求。
有特定功能或优化需求时,再选择专业数据库。比如需要搜索功能了,再加 Elasticsearch;要做 AI 知识库了,再加向量数据库。
毕竟每多一个数据库,就多一份运维工作和故障风险。
![]()
你:学会了学废了!对了鱼皮,我还听说过数据湖、数据仓库,这些是啥啊?
鱼皮:简单来说,数据仓库是用来存储和分析大量结构化数据的;数据湖更像个大水池,什么数据都能往里扔,包括日志、图片、视频这些非结构化数据。它们更多是大数据架构层面的概念。
![]()
感兴趣的话,点个关注,后面专门出一期讲讲~
![]()
点击下方关注鱼皮,获取免费编程学习路线、简历模板、面试题解、AI 知识库、项目教程、交流群。
一些对大家有用的资源:
100+ 编程学习路线 / 实战项目 / 求职指导
100+ 简历模板
300+ 企业面试题库 mianshiya.com
500+ AI 资源大全
1 对 1 模拟面试
动画学算法教程
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.