你竟然不认识除了MySQL之外的这9种数据库?真的假的?
摘要:你是小阿巴,正在公司敲代码。 老板走过来说:小阿巴,给咱们网站加个商品搜索功能吧。 你拍拍胸脯:没问题,我直接用 MySQL 数据库的 LIKE 模糊查询实现搜索,1 小时上线~ 结果上线后,用户点击搜索,卡了半天没反应,老板气得脸都绿了。
你是小阿巴,正在公司敲代码。
老板走过来说:小阿巴,给咱们网站加个商品搜索功能吧。
你拍拍胸脯:没问题,我直接用 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 数据库的可扩展性很强。
