除了MySQL,这 9 种数据库你竟然都不认识?
你是小阿巴,正在公司敲代码。老板走过来说:小阿巴,给咱们网站加个商品搜索功能吧。
你拍拍胸脯:没问题,我直接用 MySQL 数据库的 LIKE 模糊查询实现搜索,1 小时上线~
https://pic.yupi.icu/1/1769046035544-3e355bec-1028-4bb1-b637-28e9cf20c018.png
结果上线后,用户点击搜索,卡了半天没反应,老板气得脸都绿了。
你急的汗流浃背,只能找到号称『后端之狗』的鱼皮求助:阿巴阿巴,俺用 MySQL 搞不定,咋办啊……
鱼皮:不是哥们,又不是只有 MySQL 这一个数据库。
下面我来带你认识 10 种不同类型的数据库,让你知道什么场景该用什么数据库。
https://pic.yupi.icu/1/1769046078618-555a841a-ed22-4121-83b2-31cb476c98d3.png
点个收藏,我们开始~
⭐️ 推荐观看视频版,有动画更好理解:https://www.bilibili.com/video/BV1ChkjBsEzq
关系型数据库
首先是我们接触最多的、也是后端入门必学的 关系型数据库。
在关系型数据库中,数据以 表 的形式进行组织和存储,每个表就像一个 Excel 表格,包含多个 行 和多个 列。
https://pic.yupi.icu/1/1769046104268-fafdc854-6c9a-4c18-9ed2-8bed31df4255.png
比如你要做个学生管理系统,把学生信息存储到关系型数据库中,结构大概是这样的:
学号学生姓名所属班级号1小李12小鱼23小皮3上述学生表格中,每一行代表一个学生的信息,每一列代表学生的一个属性。
https://pic.yupi.icu/1/1769046133583-18e6b389-b3b7-4c56-b5f3-7482a3897bd3.png
我们可以使用结构化查询语言 SQL 来对关系型数据库表的数据进行灵活地查询、选择、过滤等。
https://pic.yupi.icu/1/1769046171362-f78a9b15-01af-461f-a381-aba768a6b9da.png
而关系型数据库最大的特点,就是表和表之间可以 存在关系。比如学生管理系统中还可以有班级表,结构如下:
班号班级名称1快乐班2泰酷班3躺平班如果我想知道某个学生所属的班级信息,只需要在查询时将学生表的 所属班级号 和班级表的 班号 进行关联,而不用把所有表格的列存储在一起,非常灵活。
https://pic.yupi.icu/1/1769046205914-6c310482-3877-4c49-9a55-d149d18dea3b.png
通过 SQL 可以连接查询多张表:
https://pic.yupi.icu/1/1769046244600-ce30e15f-2126-43fc-a411-c0c239132cad.png
得到下面的查询结果:
学号学生姓名所属班级号班级名称1小李1快乐班2小鱼2泰酷班3小皮3躺平班此外,关系型数据库遵循 ACID 原则(原子性、一致性、隔离性和持久性),通过 事务 机制可以保证多个操作同时进行时,数据的状态保持一致。
https://pic.yupi.icu/1/1769046260240-011c65d1-7cc3-4d92-9308-edbc02b58f6e.png
举个例子,A 给 B 转账,A 扣钱的同时 B 也会加钱,不会出现 A 扣了钱 B 却没收到钱的情况。
https://pic.yupi.icu/1/1769046268776-0fb467ab-ee27-4b41-875e-2b476319fa8e.png
正因为关系型数据库既能灵活查询、又能准确写入,所以它几乎可以被应用在任何项目中。比如各类管理系统、数据分析系统、金融银行系统等。
比较主流的关系型数据库产品有:
[*]MySQL:开源易学,后端开发必学的数据库
[*]Oracle:人称 “甲方的数据库”,主要是大型企业和政府机构在用,功能强大但授权费用昂贵
[*]PostgreSQL:开源界的天花板,功能最全面
[*]SQL Server:微软出品,和 Windows 系统、.NET 生态集成度高
[*]SQLite:整个数据库就是一个文件,不需要服务器,非常轻量。被广泛应用在手机 APP、浏览器中,你的手机里可能有几十个 SQLite。
https://pic.yupi.icu/1/1769046291097-2dea6cb4-76e5-45ef-8799-e187324eee46.png
对于大多数项目,用 MySQL 等关系型数据库来存储数据就足够了。但如果要存储的数据间没有复杂关系、或者需要极致的性能时,它并不是最佳选择。
你点点头:俺知道,就好比俺要写一篇文章,没必要非得把内容塞进 Excel 表格里,直接放到 Word 文档里会更方便编辑和阅读。
https://pic.yupi.icu/1/1769046311448-c44f5ab1-122a-4f6d-b747-72a751076c40.png
鱼皮:没错,这时就需要与关系型数据库互补的 非关系型数据库。
非关系型数据库
非关系型数据库又叫 NoSQL(Not Only SQL),适合存储关系不强的、结构灵活的、需要快速访问的数据。
打个比方,关系型数据库像图书馆,书籍分类明确、摆放有序、借阅有规矩;非关系型数据库像你的书桌,怎么顺手怎么放,拿取方便最重要。
https://pic.yupi.icu/1/1769046340534-5f4466d4-a3ca-4ee6-ac3c-20ef7dccf7e2.png
在实际项目开发中,最常用的非关系型数据库是 KV 数据库和文档数据库。
KV 键值数据库
KV 即 Key-Value,数据是以 键值对 的方式存储在数据库中的,可以理解为一个超大的 HashMap,数据库中存储的每个键都 唯一对应 一个值。
https://pic.yupi.icu/1/1769046368331-812c7cf0-c7f7-4729-a6e3-355e12c97012.png
比如存储用户信息和热门商品信息,结构是这样的:
Key 键Value 值user:1001{"name":"鱼皮", "age":25}product:hot["商品1", "商品2", "商品3"]键和值都可以是任意类型的数据,包括字符串、数字、数组、JSON 对象等,非常灵活。
https://pic.yupi.icu/1/1769046389692-9ca17922-31d9-4d96-b137-e656a28b7bb1.png
由于 KV 存储的结构简单清晰,我们能够很轻松地根据某个键查找出对应的值,就像查字典一样,读写数据的性能都非常高。
https://pic.yupi.icu/1/1769046410265-58317e5d-f180-40a0-b74e-73303c51e51c.png
此外,KV 数据库的可扩展性很强。因为数据间不存在直接关联,我们可以把键值对分散到多台机器上存储,通过数据分片、负载均衡等策略来支持海量数据的高并发访问。
https://pic.yupi.icu/1/1769046426157-472a8692-ce7c-4f35-ac9f-f72f79e64461.png
由于高性能和高可扩展性,KV 数据库被广泛应用于缓存、分布式会话、分布式锁、实时统计等场景。
最经典的 KV 数据库肯定是 Redis,它是开源的、基于内存的数据库,不仅支持丰富的数据类型和功能,还有持久化等重要特性,也是后端必学的技术。其他的常用 KV 数据库有 Memcached、Etcd、LevelDB、RocksDB 等。
https://pic.yupi.icu/1/1769046460033-399df7a0-52ab-4688-87a9-d588e023a2cd.png
文档数据库
文档数据库也属于非关系型数据库。顾名思义,它适用于存储和管理 半结构化的 文档数据,数据一般以 JSON(BSON)格式存储。
https://pic.yupi.icu/1/1769046482240-ed33a56b-ee35-4675-9f4a-198dc358aa81.png
相比于关系型数据库中严格定义的表格行列,文档数据库的数据结构更像是一份份独立的文档,每个文档都可以包含不同类型和格式的数据,结构非常灵活。
https://pic.yupi.icu/1/1769046496875-31c79250-75d5-47c3-aa99-6b26592529cf.png
比如存储博客文章,结构是这样的:
文档 ID文档数据1{"_id": 1, "title": "文章标题1", "content": "这是文章1的内容"}2{"_id": 2, "title": "文章标题2", "author": "程序员鱼皮"}你挠挠头:诶,文档 1 和文档 2 的字段都不一样啊,这也行?
https://pic.yupi.icu/1/1769046523057-2b5ec58d-cc9b-4158-86e9-9d064234837f.png
鱼皮:没错,这就是文档数据库的灵活性。当我们要给某个文档新增一个字段时,不需要像关系型数据库那样先改表结构,直接加就完事了。
https://pic.yupi.icu/1/1769046535768-95f8c433-799a-4dc1-8eba-57462a06cb60.png
而且支持水平扩展,可以分散到多台服务器上存储,适用于内容管理系统、博客平台、电商商品详情页等场景。
https://pic.yupi.icu/1/1769046553474-2f4f8e29-acd7-4513-97f3-3c3db8387d00.png
推荐学习的文档数据库是 MongoDB,因为它存储的就是 JSON(BSON)格式数据,对前端同学很友好,入门难度也很低。
https://pic.yupi.icu/1/1769046584609-f8d64eee-2ba0-47d5-9bcf-53b6c649bab8.png
特定场景的数据库
虽然关系型和非关系型数据库已经能够满足大部分场景,但在一些特殊场景下,使用专门设计的数据库会更高效。就像你可以用菜刀砍树,但用斧子会更快更省力。
搜索引擎数据库
专门为搜索功能设计的数据库。它能存储和管理大量文本数据,提供快速、准确、灵活的全文检索功能。
https://pic.yupi.icu/1/1769046741104-26c4789b-eacc-44cc-8e56-2bc0540fbf83.png
你挠挠头:凭什么它能做到这些呢?
鱼皮:秘密在于它使用了 倒排索引 的方式存储数据。
以存储博客文档为例,关系型数据库的存储结构是:
文档 id文档内容1感谢关注鱼皮2鱼皮是一名程序员3感谢关注编程导航我们能够根据 id 来查找到对应的单篇文档,也可以通过搜索精确的关键词,来查找到多篇文档。
比如搜索 "鱼皮",能搜出文档 1、2。
https://pic.yupi.icu/1/1769046766080-461cb25b-ee6e-4147-95c2-9c29de154d6f.png
但是,如果你搜索 "鱼皮程序员",是无法得到搜索结果的,因为没有任何一个文档的内容完全包含 "鱼皮程序员" 这个词。
https://pic.yupi.icu/1/1769046788388-c7d61899-5f12-4602-913e-6aeadf8ff11e.png
而在搜索引擎数据库中,首先会将文档内容按照单词进行分割,也就是 分词。然后 建立倒排索引,也就是构建 单词到文档 id 的映射。
https://pic.yupi.icu/1/1769046816558-f4664b4c-adbc-49db-aac8-5d226a4ad79e.png
有了上述的倒排索引,当用户搜索 "鱼皮程序员" 时,搜索引擎数据库会先对搜索词进行分词,得到 "鱼皮" 和 "程序员",然后根据这两个词汇就能找到文档 id 1 和 2 了。不用再一行一行遍历表内所有的数据,实现了更灵活、快速的搜索。
https://pic.yupi.icu/1/1769046846293-ad818adf-7827-4e35-ab0e-a533abdbfb3e.png
此外,搜索引擎数据库还支持 相关性排序,能够根据用户的搜索词对所有搜索结果进行打分,把最相关的文档排到最上面,就像谷哥度娘那样。
https://pic.yupi.icu/1/1769046887031-ef06a928-c79e-4137-add9-af354960718e.png
主流的搜索引擎数据库技术有 Elasticsearch、Apache Solr 等,建议只学习 Elasticsearch 就够了,它的社区最活跃、学习资料最丰富。
向量数据库
向量数据库是专门用于存储和处理 高维向量数据 的数据库,也是 AI 时代最火的数据库。
你好奇道:啥是向量?
鱼皮:简单来说,向量是一个数字数组,每个数字代表一个 特征 维度。
https://pic.yupi.icu/1/1769046928023-6111fd54-4926-4ef0-b67b-e10f3af57d52.png
举个例子,在人脸识别系统中,我们需要通过人脸的特征来判断是否为同一个人。每张人脸图像都可以通过 AI 模型转换成一个向量,这个向量可能包含成百上千个数字,每个数字代表图像的一个 抽象 特征维度。
https://pic.yupi.icu/1/1769046952154-95dacf33-fdb9-4292-9dc5-f380cbd436a0.png
实际上,很难说清楚每个数字代表什么,但便于理解,你可以 想象 下标 0 代表鼻子大小,下标 1 代表眼睛距离等等,以此类推。
https://pic.yupi.icu/1/1769046978264-07db43ed-3359-42f1-9eb5-398a50075612.png
之后通过余弦相似度等算法来计算两个向量的相似度,就能判断出两张人脸是不是同一个人。
https://pic.yupi.icu/1/1769046993671-ade00d9a-8843-4c49-831a-5b56fe3ce1d5.png
向量数据库能够高效存储这些多维向量数据、快速计算向量的相似度、并实现各种不同算法的相似性搜索。适用于人脸识别、推荐系统、语义搜索等场景。
https://pic.yupi.icu/1/1769047040406-e482b09b-5bde-4d53-ab72-f3f4fc517740.png
在 AI 时代,可以用向量数据库给 AI 提供特定领域的知识库,大大提升回答的准确性。
https://pic.yupi.icu/1/1769047066536-0ef08cd3-b86b-4c97-9016-7add32a710b8.png
主流的向量数据库技术有 Milvus、Pinecone 等,像 PostgreSQL 关系型数据库也通过插件支持存储向量类型的数据。
https://pic.yupi.icu/1/1769047081407-1a8b5917-6287-44a7-829a-d6d451fd94d5.png
图数据库
图数据库是专门用于存储和处理 图结构数据 的数据库。
注意,这里的 “图” 可不是照片或图表,而是数学中的图论概念,由节点(Node)和边(Edge)构成的图形结构。
https://pic.yupi.icu/1/1769047101689-da28414a-be17-41f6-bbd4-bcf383b7bcb6.png
比如我们要存储一个社交网络的朋友关系,对应的图可能是由多个用户节点和好友关系边组成的。
https://pic.yupi.icu/1/1769047119607-ae21e16a-3a0a-41f1-9a86-8a6397221d40.png
在图数据库中,需要 2 个表格来存储。
1)节点信息表:
节点 id节点名1鱼皮2阿巴3编程导航2)边信息表:
边 id边类型起始节点结束节点1好友122好友23通过存储这些节点和边的信息,图数据库就能快速查询和分析复杂的关系网络。比如查找 “朋友的朋友”、计算两个用户之间的最短路径、发现社交圈子等等。
https://pic.yupi.icu/1/1769047139049-319a4d3b-4cb0-4621-96cd-7bcb389e3bd5.png
因此,图数据库非常适合构建社交网络、推荐系统、知识图谱等。
比较主流的图数据库有 Neo4j、TigerGraph 等,都支持复杂的图算法和分布式扩展,能够通过并行计算加速图形处理。
时序数据库
时序数据库是专门用于高效存储和处理 时间序列 的数据库。
时间序列是指以时间作为主要维度的数据序列,也就是每个数据单元都带着 时间戳,按时间顺序排列。
https://pic.yupi.icu/1/1769047158435-efe7a535-5933-435e-be72-e3c8564938d3.png
举个例子,在服务器监控系统中,我们需要每分钟记录服务器的 CPU 使用率、内存使用率等指标,数据结构如下:
时间戳设备IDCPU使用率内存使用率2026-01-08 10:00Server00145%60%2026-01-08 10:01Server00148%62%2026-01-08 10:02Server00152%65%有了这些数据,我们就能够按照时间范围进行高效查询、做聚合分析(比如计算过去 1 小时的平均 CPU 使用率)、进行数据可视化展示。
https://pic.yupi.icu/1/1769047202953-465cad36-e6d7-40af-8606-b996f48427c4.png
因此,时序数据库非常适用于物联网设备监控、服务器性能监控、金融交易数据分析等场景。
主流的时序数据库技术有 InfluxDB、TimescaleDB 等,一般会配合 Grafana 监控看板一起使用,实现数据存储 + 快速可视化。你在运维团队看到的那些酷炫的实时监控大屏,背后就是时序数据库在支撑。
https://pic.yupi.icu/1/1769047244293-20682c1e-1b4e-4d85-86d8-7f19423d5e63.png
列存数据库
区别于传统的行式数据库,列存数据库 以列作为基本的存储单位,把每一列的数据存储在一起。
拿公司每天的收入来举个例子,传统的行式数据库是这么存储的:
日期销售额成本利润2026-01-01500600-1002026-01-02280450-1702026-01-03290480-190而在列存数据库中,底层大概是这么存储的,看起来像是对矩阵做了一次转置:
日期2026-01-012026-01-022026-01-03销售额500280290成本600450480利润-100-170-190https://pic.yupi.icu/1/1769047283720-dc8a1a80-775f-42c3-b9ad-905482211ef7.png
如果我们要统计这 3 天公司的总利润,传统的行式数据库需要依次读取每一行的数据,然后再提取出利润这一列进行计算;而列存数据库直接读取利润这一列就行了,不用管其他列,大大提高了数据分析和聚合操作的效率。
https://pic.yupi.icu/1/1769047302972-d25465bf-e742-4195-bdd9-02d35221cb2c.png
而且从计算机底层来分析,把相同类型的数据在同一列中连续存储,可以实现更好的数据压缩效果、节约存储空间。
https://pic.yupi.icu/1/1769047320827-2f01f292-2740-48c9-9e88-ce76fb916d69.png
因此,列存数据库适用于报表生成、数据仓库、商业智能分析等场景。
主流的列存数据库技术有 ClickHouse、Apache HBase、Druid 等,都是大数据开发的必修课。
融合型数据库
前面我们讲了关系型和非关系型数据库,要么强调灵活查询、要么强调性能和扩展,各有侧重。
但有些数据库偏偏 “既要又要”,要把两者的优点融合到一起,这就是接下来要讲的融合型数据库。
NewSQL 数据库
NewSQL 是一类新兴的数据库,它融合了传统关系型和非关系型数据库的优点。既有传统 SQL 数据库的 ACID 特性和事务支持,又有 NoSQL 的水平扩展能力和高性能。支持标准 SQL 查询、分布式架构、自动容错和故障恢复,可以替代传统的分库分表方案,特别适用于大厂的高并发系统。
https://pic.yupi.icu/1/1769047409874-a71a5bb2-55e3-4fdf-989f-279443f6333e.png
主流的 NewSQL 数据库有 TiDB、CockroachDB、Google Spanner 等。其中 TiDB 是国产之光,支持 HTAP(混合事务分析处理),而且完全兼容 MySQL 协议,迁移成本低;CockroachDB 人称 “蟑螂数据库”,因为它像蟑螂一样顽强,集群中一个节点挂了,其他节点依然能正常服务,打不死。
https://pic.yupi.icu/1/1769047435788-00b95325-6db3-4e0d-ad0e-9306aae0a44a.png
多模数据库
区别于前面所有存储单一数据模型的数据库,多模数据库能够直接在一个数据库里同时存储和处理 多种不同类型 的数据。比如关系型数据、文档数据、图形数据、键值对数据等等,非常灵活、省去了维护多个数据库的麻烦。
https://pic.yupi.icu/1/1769047520260-ce9f1d1f-7461-4d72-8399-da26f32895d3.png
而且多模数据库还支持跨模型事务,能够更轻松地实现数据的一致性和完整性,不需要手动实现跨库事务、跨库数据同步这些复杂操作。
https://pic.yupi.icu/1/1769047563591-50c268c7-a5b5-446b-b26f-5442585954cb.png
虽然听起来很厉害,但实际开发中很少用,因为样样通样样松,多模数据库的性能往往不如专注单一场景的数据库。
原生的多模数据库技术有 ArangoDB、OrientDB 等,它们从设计之初就是为多模式设计的。前面也提到,虽然 PostgreSQL 这样的老牌关系型数据库可以通过丰富的插件支持多种数据类型(比如 JSON 文档、向量、地理空间数据等),但它的核心始终是关系模型,多模支持算是锦上添花,不过这也体现了 PostgreSQL 的强大。
https://pic.yupi.icu/1/1769047616509-2f804e48-da67-46b4-98be-c055be6e8afe.png
怎么选择数据库?
你一脸懵逼:阿巴阿巴,你讲了这么多数据库,俺头都大了,到底该选哪个?
https://pic.yupi.icu/1/1769047642317-6caf5e32-e14f-4026-bfcf-b978c273dee9.png
鱼皮笑了笑:别慌,数据库选型其实没那么复杂。
优先选用 MySQL / PostgreSQL + Redis,能覆盖 90% 的项目需求。
有特定功能或优化需求时,再选择专业数据库。比如需要搜索功能了,再加 Elasticsearch;要做 AI 知识库了,再加向量数据库。
毕竟每多一个数据库,就多一份运维工作和故障风险。
https://pic.yupi.icu/1/1769047680049-1448b1e3-a317-44fb-a460-73ed9d86584c.png
你:学会了学废了!对了鱼皮,我还听说过数据湖、数据仓库,这些是啥啊?
鱼皮:简单来说,数据仓库是用来存储和分析大量结构化数据的;数据湖更像个大水池,什么数据都能往里扔,包括日志、图片、视频这些非结构化数据。它们更多是大数据架构层面的概念。
https://pic.yupi.icu/1/1769047706736-b6be24ca-b499-4cb8-855a-3c3f69e3b0eb.png
感兴趣的话,点个关注,后面专门出一期讲讲~
https://pic.yupi.icu/1/1769047895228-bbfb3796-2c85-4819-8a05-485c995c4980.webp
更多编程学习资源
[*]Java前端程序员必做项目实战教程+毕设网站
[*]程序员免费编程学习交流社区(自学必备)
[*]程序员保姆级求职写简历指南(找工作必备)
[*]程序员免费面试刷题网站工具(找工作必备)
[*]最新Java零基础入门学习路线 + Java教程
[*]最新Python零基础入门学习路线 + Python教程
[*]最新前端零基础入门学习路线 + 前端教程
[*]最新数据结构和算法零基础入门学习路线 + 算法教程
[*]最新C++零基础入门学习路线、C++教程
[*]最新数据库零基础入门学习路线 + 数据库教程
[*]最新Redis零基础入门学习路线 + Redis教程
[*]最新计算机基础入门学习路线 + 计算机基础教程
[*]最新小程序入门学习路线 + 小程序开发教程
[*]最新SQL零基础入门学习路线 + SQL教程
[*]最新Linux零基础入门学习路线 + Linux教程
[*]最新Git/GitHub零基础入门学习路线 + Git教程
[*]最新操作系统零基础入门学习路线 + 操作系统教程
[*]最新计算机网络零基础入门学习路线 + 计算机网络教程
[*]最新设计模式零基础入门学习路线 + 设计模式教程
[*]最新软件工程零基础入门学习路线 + 软件工程教程
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 新版吗?好像是停更了吧。 谢谢楼主提供! 不错,里面软件多更新就更好了 这个好,看起来很实用 鼓励转贴优秀软件安全工具和文档! 新版吗?好像是停更了吧。 新版吗?好像是停更了吧。 谢谢分享,试用一下 谢谢分享,辛苦了 谢谢分享,辛苦了 前排留名,哈哈哈 新版吗?好像是停更了吧。 用心讨论,共获提升! 喜欢鼓捣这些软件,现在用得少,谢谢分享! 东西不错很实用谢谢分享
页:
[1]