核心内容摘要
颠覆式流媒体本地化解决方案:N_m3u8DL-RE全场景媒体下载工具深度解析
你是小阿巴正在公司敲代码。
老板走过来说小阿巴给咱们网站加个商品搜索功能吧。
你拍拍胸脯没问题我直接用 MySQL 数据库的 LIKE 模糊查询实现搜索1 小时上线~结果上线后用户点击搜索卡了半天没反应老板气得脸都绿了。
你急的汗流浃背只能找到号称『后端之狗』的鱼皮求助阿巴阿巴俺用 MySQL 搞不定咋办啊……鱼皮不是哥们又不是只有 MySQL 这一个数据库。
下面我来带你认识 10 种不同类型的数据库让你知道什么场景该用什么数据库。
点个收藏我们开始~⭐️ 推荐观看视频版有动画更好理解https://www.bilibili.com/video/BV1ChkjBsEzq关系型数据库首先是我们接触最多的、也是后端入门必学的关系型数据库。
在关系型数据库中数据以表的形式进行组织和存储每个表就像一个 Excel 表格包含多个行和多个列。
比如你要做个学生管理系统把学生信息存储到关系型数据库中结构大概是这样的学号学生姓名所属班级号1小李12小鱼23小皮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 文档里会更方便编辑和阅读。
鱼皮没错这时就需要与关系型数据库互补的非关系型数据库。
非关系型数据库非关系型数据库又叫 NoSQLNot 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 等。
文档数据库文档数据库也属于非关系型数据库。
顾名思义它适用于存储和管理半结构化的文档数据数据一般以 JSONBSON格式存储。
相比于关系型数据库中严格定义的表格行列文档数据库的数据结构更像是一份份独立的文档每个文档都可以包含不同类型和格式的数据结构非常灵活。
比如存储博客文章结构是这样的文档 ID文档数据1{“_id”: 1, “title”: “文章标题1”, “content”: “这是文章1的内容”}2{“_id”: 2, “title”: “文章标题2”, “author”: “程序员鱼皮”}你挠挠头诶文档 1 和文档 2 的字段都不一样啊这也行鱼皮没错这就是文档数据库的灵活性。
当我们要给某个文档新增一个字段时不需要像关系型数据库那样先改表结构直接加就完事了。
而且支持水平扩展可以分散到多台服务器上存储适用于内容管理系统、博客平台、电商商品详情页等场景。
推荐学习的文档数据库是 MongoDB因为它存储的就是 JSONBSON格式数据对前端同学很友好入门难度也很低。
特定场景的数据库虽然关系型和非关系型数据库已经能够满足大部分场景但在一些特殊场景下使用专门设计的数据库会更高效。
就像你可以用菜刀砍树但用斧子会更快更省力。
搜索引擎数据库专门为搜索功能设计的数据库。
它能存储和管理大量文本数据提供快速、准确、灵活的全文检索功能。
你挠挠头凭什么它能做到这些呢鱼皮秘密在于它使用了倒排索引的方式存储数据。
以存储博客文档为例关系型数据库的存储结构是文档 id文档内容1感谢关注鱼皮2鱼皮是一名程序员3感谢关注编程导航我们能够根据 id 来查找到对应的单篇文档也可以通过搜索精确的关键词来查找到多篇文档。
比如搜索 “鱼皮”能搜出文档
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好友122好友23通过存储这些节点和边的信息图数据库就能快速查询和分析复杂的关系网络。
比如查找 “朋友的朋友”、计算两个用户之间的最短路径、发现社交圈子等等。
因此图数据库非常适合构建社交网络、推荐系统、知识图谱等。
比较主流的图数据库有 Neo4j、TigerGraph 等都支持复杂的图算法和分布式扩展能够通过并行计算加速图形处理。
时序数据库时序数据库是专门用于高效存储和处理时间序列的数据库。
时间序列是指以时间作为主要维度的数据序列也就是每个数据单元都带着时间戳按时间顺序排列。
举个例子在服务器监控系统中我们需要每分钟记录服务器的 CPU 使用率、内存使用率等指标数据结构如下时间戳设备IDCPU使用率内存使用率
10:00Server00145%60%
10:01Server00148%62%
10:02Server00152%65%有了这些数据我们就能够按照时间范围进行高效查询、做聚合分析比如计算过去 1 小时的平均 CPU 使用率、进行数据可视化展示。
因此时序数据库非常适用于物联网设备监控、服务器性能监控、金融交易数据分析等场景。
主流的时序数据库技术有 InfluxDB、TimescaleDB 等一般会配合 Grafana 监控看板一起使用实现数据存储 快速可视化。
你在运维团队看到的那些酷炫的实时监控大屏背后就是时序数据库在支撑。
列存数据库区别于传统的行式数据库列存数据库以列作为基本的存储单位把每一列的数据存储在一起。
拿公司每天的收入来举个例子传统的行式数据库是这么存储的日期销售额成本利润
而在列存数据库中底层大概是这么存储的看起来像是对矩阵做了一次转置日期
销售额500280290成本600450480利润-
如果我们要统计这 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 知识库了再加向量数据库。
毕竟每多一个数据库就多一份运维工作和故障风险。
你学会了学废了对了鱼皮我还听说过数据湖、数据仓库这些是啥啊鱼皮简单来说数据仓库是用来存储和分析大量结构化数据的数据湖更像个大水池什么数据都能往里扔包括日志、图片、视频这些非结构化数据。
它们更多是大数据架构层面的概念。
感兴趣的话点个关注后面专门出一期讲讲~更多编程学习资源Java前端程序员必做项目实战教程毕设网站程序员免费编程学习交流社区自学必备程序员保姆级求职写简历指南找工作必备程序员免费面试刷题网站工具找工作必备最新Java零基础入门学习路线 Java教程最新Python零基础入门学习路线 Python教程最新前端零基础入门学习路线 前端教程最新数据结构和算法零基础入门学习路线 算法教程最新C零基础入门学习路线、C教程最新数据库零基础入门学习路线 数据库教程最新Redis零基础入门学习路线 Redis教程最新计算机基础入门学习路线 计算机基础教程最新小程序入门学习路线 小程序开发教程最新SQL零基础入门学习路线 SQL教程最新Linux零基础入门学习路线 Linux教程最新Git/GitHub零基础入门学习路线 Git教程最新操作系统零基础入门学习路线 操作系统教程最新计算机网络零基础入门学习路线 计算机网络教程最新设计模式零基础入门学习路线 设计模式教程最新软件工程零基础入门学习路线 软件工程教程