大型网站架构的技术细节:后端架构数据库——数据库设计
数据库设计
数据库设计指的是根据业务需求建立数据存储模型,简单地说,数据库设计就是表设计,把需要记录的数据合理地分散在不同的表当中。数据库设计能直接影响到整个网站系统的质量,其重要性是不言而喻的。
一般情况下,数据库设计很大程度上取决于具体业务需求和设计者偏好。
对于某个具体的数据库设计,很难界定其是否是最优的设计。因此,最优数据库设计其实是一个开放性问题,没有绝对的标准。数据库设计只要在一定程度上平衡好“数据冗余”和“数据操作的性能”就可以了。
说明:关于数据库设计,有很多规范和原则,如范式等。但是这些规范和原则只能优化已有的数据库设计,而不能从无到有地指导数据库设计,所以在这里不展开介绍。
对于大型网站而言,其数据库的内部结构是十分复杂的。复杂的数据库结构会带来维护或扩展的困难。因此,大型网站的数据库需要处理好两个问题以达到降低复杂度的目的:分离数据库和限制关系层级。同时,这两个问题的解决思路也可作为指导数据库设计的思想。
1.分离数据库
一个数据库中包含多张表是不可避免的事情,但是如果一个数据库中有几十甚至上百张表则会出现非常混乱的情况。因此,数据库设计需要分离数据库,避免出现一个数据库包含过多表的情况。
分离数据库需要根据具体业务而定,因此,分离数据库可以参考业务架构。
在2.1.1小节“业务架构面临的挑战”中曾强调,业务架构需要划分出功能模块,而这些功能模块大多是相互独立、互不影响的。在数据库设计中,可以为这些功能模块分离出独立的数据库。分离数据库后,每个数据库的复杂度就会降低(表的个数减少),较低复杂度的数据库在进行维护或扩展时都相对
容易一些。以一个视频平台为例,根据业务模块分离数据库后,可独立出用户库、资源库、发布库及统计库等。如果后端应用程序也是根据业务模块分为相互独立的几个后端应用程序的话,那么某个业务模块的后端应用程序和数据库就可以看作一个整体,一个可以根据业务模块垂直拆分出来的整体,如图4.68所示。
在实际网站系统当中,即使是相互独立的业务模块,也难免在功能上有所关联,如“资源”业务模块中需要记录资源所属用户,“发布”业务模块中需要记录使用的资源等。因此,每个数据库都应该提供一个主要属性供其他数据库使用,以满足业务功能的需求,如图4.69所示。一般情况下,一个数据库只对外提供几个主要属性。
说明:主键指的数据表中的一个或多个字段,主键可以唯一标识数据表中的某一条记录,每个数据表至少需要设置一个字段作为主键。外键指的是数据表中的一个字段,这个字段可以与其他数据库产生关联,外键一般是其他数据表的主键。
分离数据库后,不同数据库的数据是相互隔离的,不可以跨数据库操作数据。数据库分离无疑会增加后端应用程序的复杂度,分离数据库之前,通过一个SQL语句就能实现多表操作,而分离之后,只能通过多次操作数据或者联合多个接口才能实现。
说明:如果多个数据库运行在相同的MySQL实例当中,可以通过“视图”联合查询多个数据库的数据。如果多个数据库运行在不同的MySQL实例当中,也可以通过“数据库同步”的方式让数据同步到同一个MySQL实例当中,然后通过“视图”联合查询多个数据库的数据,但是这种方式查询到的往往不是实时数据。在大型网站系统当中,这些方式都是不被推荐的。
这种由于分离数据库造成的限制是良性的,因为一个SQL语句实现多表操作是非常损耗性能的,而且可能会阻塞其他数据操作(影响并发能力)。数据库分离后,这种不被推荐的“一个SQL语句实现多表操作”就会被强制减少,从而减少后期优化数据库操作的工作量。再者,分离数据库能让开发人员强制遵循“模块垂直划分”的原则,让程序保持结构整洁。
2.限制关系层级
分离数据库后,单个数据库里的表设计可以根据业务模块的子模块划分。
但是如果只按照子模块分表的话,可能会出现过多冗余数据的情况,而降低冗余数据的方法是增加子表。一旦分离子表,就会有关系层级,这个层级一般不要超过两层,否则表的关系会变得复杂,操作数据也会变得复杂。
以视频平台的“资源”数据库为例,由于一个视频资源往往需要转码成“高清”“流畅”等视频,所以“资源”数据库需要分离出“转码视频”表和“原视频”表,如图4.70所示。其中,“转码视频”表中也可以再分离出子表(如转码模板等),但是一般不建议这么做,因为“转码视频”表已经处在第二关系层级,如果再细分子表的话,数据库结构会变得复杂,同时数据操作也会变得烦琐。
以上对数据库设计的介绍当中,只考虑了业务需求。而在大型网站系统当中,往往会出现查询或操作某些数据比较集中的情况,而这部分数据,需要做特殊处理(合并数据库或拆分表)。也就是说,大型网站系统的数据库设计除了要考虑业务需求以外,还需要权衡使用场景带来的数据操作压力。
3.数据库管理工具
数据库设计完成后,就可以构造数据库了。构造数据库当然可以通过SQL语句实现,但是通过SQL语句构造或维护数据库是一件十分麻烦的事情。所以在“构造数据库”或“数据库维护”时,一般使用有操作界面的数据库管理工具。以MySQL数据库为例,可以使用Navicat for MySQL作为数据库管理工具,如图4.71所示。
本文给大家讲解的内容是大型网站架构的技术细节:后端架构数据库--数据库设计
- 下篇文章给大家讲解的内容是大型网站架构的技术细节:后端架构数据库-数据库操作框架
- 感谢大家的支持!
版权声明:
作者: FreeClashNode
链接: https://www.freeclashnode.com/news/article-766.htm
来源: www.freeclashnode.com
文章版权归作者所有,未经允许请勿转载。
热门文章
- 10月1日免费节点分享|18M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月2日免费节点分享|22.8M/S,Singbox节点/Shadowrocket节点/Clash节点/V2ray节点|免费上网梯子每天更新
- 10月3日免费节点分享|20.1M/S,SSR节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 9月30日免费节点分享|19.1M/S,Clash节点/V2ray节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月6日免费节点分享|19.2M/S,V2ray节点/Singbox节点/Shadowrocket节点/Clash节点|免费上网梯子每天更新
- 10月8日免费节点分享|22.5M/S,V2ray节点/Singbox节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 10月11日免费节点分享|18.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 10月5日免费节点分享|19.9M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
最新文章
- 10月29日免费节点分享|21.6M/S,SSR节点/Clash节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 探索数字世界的门户:电脑科学上网贴吧完全指南
- 10月28日免费节点分享|22.8M/S,Singbox节点/SSR节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 穿越数字边界:科学上网的全面指南与深度思考
- 10月27日免费节点分享|20M/S,Shadowrocket节点/Singbox节点/V2ray节点/Clash节点|免费上网梯子每天更新
- 数字世界的破壁之旅:科学上网全指南与实用工具深度解析
- 10月26日免费节点分享|21.5M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 跨越知识边界:浙大学子的全球学术网络探索指南
- 10月25日免费节点分享|18.1M/S,SSR节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月24日免费节点分享|20.5M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 刘大猫科学上网全攻略:解锁全球网络的终极指南
- 10月23日免费节点分享|22.2M/S,Shadowrocket节点/Clash节点/Singbox节点/V2ray节点|免费上网梯子每天更新
- 全面解析Quantumult安卓版:功能、安装与配置教程
- 双重防护,畅享无界:AdGuard联手V2RayNG,打造极致安全的上网体验
- 10月22日免费节点分享|18.8M/S,V2ray节点/SSR节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 掌握Clash白名单设置:精准控制代理流量的艺术
- 10月21日免费节点分享|22M/S,Clash节点/Singbox节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 突破网络边界:技术科学上网的终极安全指南
- 10月20日免费节点分享|22.9M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
- Shadowrocket 选购指南:从入门到精通,找到你的专属代理神器
- 10月19日免费节点分享|19.3M/S,Singbox节点/V2ray节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- 深入解读:V2Ray为何比SSR更安全?一场网络隐私的全方位较量
- 10月18日免费节点分享|20.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 深度指南:Shadowrocket从入门到精通——iOS用户的网络自由密钥
- 10月17日免费节点分享|18M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 深入解析科学上网套:全方位使用指南与常见问题解答
- 10月16日免费节点分享|22M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 10月15日免费节点分享|21.2M/S,Clash节点/SSR节点/V2ray节点/Singbox节点|免费上网梯子每天更新
- 全局掌控:安卓设备上 Clash 全局模式完整设置指南与深度解析
- 解锁全球游戏体验:育碧平台科学上网全攻略与深度解析
- 10月14日免费节点分享|22.5M/S,Clash节点/V2ray节点/Singbox节点/SSR节点|免费上网梯子每天更新
- 华为Mate 10科学上网全攻略:突破限制,畅游全球网络
- 10月13日免费节点分享|22.1M/S,V2ray节点/Clash节点/Singbox节点/Shadowrocket节点|免费上网梯子每天更新
- 10月12日免费节点分享|22.7M/S,Shadowrocket节点/V2ray节点/Singbox节点/Clash节点|免费上网梯子每天更新
- 量子ULT全方位指南:从下载配置到高阶玩法一网打尽
- 10月11日免费节点分享|18.6M/S,V2ray节点/Clash节点/SSR节点/Singbox节点|免费上网梯子每天更新
- 极路由V2ray插件完全指南:打造家庭网络的安全屏障
- 10月10日免费节点分享|18.3M/S,V2ray节点/Singbox节点/Clash节点/SSR节点|免费上网梯子每天更新
- 极速狂飙与正义追击:《警车 Clash》深度解析与高阶攻略
- 10月9日免费节点分享|22.3M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 用hosts文件科学上网:一份从入门到实战的详细指南
- 10月8日免费节点分享|22.5M/S,V2ray节点/Singbox节点/Clash节点/Shadowrocket节点|免费上网梯子每天更新
- iOS设备上SSR科学上网全教程:从入门到精通
- 10月7日免费节点分享|23M/S,Singbox节点/Clash节点/Shadowrocket节点/V2ray节点|免费上网梯子每天更新
- 深度剖析V2Ray订阅机制:从零搭建高效、安全的科学上网环境
- 10月6日免费节点分享|19.2M/S,V2ray节点/Singbox节点/Shadowrocket节点/Clash节点|免费上网梯子每天更新
- 全面解析蚕蛹生态冲突及其多元价值
- 10月5日免费节点分享|19.9M/S,Singbox节点/Clash节点/V2ray节点/SSR节点|免费上网梯子每天更新
- 从零开始:手把手教你刷梅林固件实现安全科学上网
- 10月4日免费节点分享|20M/S,SSR节点/V2ray节点/Clash节点/Singbox节点|免费上网梯子每天更新
归档
- 2026-10 56
- 2026-09 58
- 2026-08 63
- 2026-07 61
- 2026-06 55
- 2026-05 56
- 2026-04 51
- 2026-03 60
- 2026-02 52
- 2026-01 56
- 2025-12 59
- 2025-11 55
- 2025-10 56
- 2025-09 55
- 2025-08 49
- 2025-07 31
- 2025-06 30
- 2025-05 31
- 2025-04 30
- 2025-03 388
- 2025-02 360
- 2025-01 403
- 2024-12 403
- 2024-11 390
- 2024-10 403
- 2024-09 388
- 2024-08 402
- 2024-07 427
- 2024-06 442
- 2024-05 181
- 2024-04 33
- 2024-03 31
- 2024-02 29
- 2024-01 51
- 2023-12 52
- 2023-11 32
- 2023-10 32
- 2023-09 3