学习笔记-范式与反范式化

数据库设计中,范式是一种规范化规则,从第一范式到第五范式,逐步消除数据冗余和异常。然而,过度范式化可能导致查询效率降低。反范式化则是允许数据冗余以提高查询性能,通过牺牲部分数据一致性来换取时间效率。热点分散技术用于缓解高并发场景下计数字段更新的性能问题,如分散更新、分段存储等。在实际应用中,数据库设计应灵活结合范式化与反范式化,根据业务需求找到最佳平衡点。
摘要由CSDN通过智能技术生成

什么是范式

构造数据所需要遵循的规则,从第一范式到第五范式,依次加强规则,到第五范式被称为完美范式

范式规则

第一范式

第一范式规定的是字段的不可分割
比如 在 产品表里 有个product字段,往里面塞了 name+price ,就不符合第一范式,第一范式要求 应该把name 和price分成两个字段

第二范式

第二范式要求的是主键的不可分割
比如 一条订单的唯一主键是只有订单号,如果选择订单号和产品ID作为主键就不符合要求了

第三范式

在第二范式的基础上,第三范式要求字段定义的唯一性
即产品表里存在了 产品名,由于产品名依赖的 是产品表
那么其余里就不能出现产品名

范式化的思考

范式化的数据库,存在着某种美感,但数据库却不应该无脑范式化
比如,虽然在采用第三范式后,由于主键单一,数据的更新速度会很快

与之相反的,如果严格蹲守范式化,当要查询复合信息,要关联的表就会成倍的增长,这对于目前的大数据时代,在性能方面无疑是一场灾难。

由此可见 完全范式化虽然带来了更新上的优势(主键唯一,字段完全依赖单一主键)但是在查询上看,多张表的关联反而成为制约着高性能的瓶颈

反范式化

反范式化其实就是不去刻意的遵守范式化,允许在表中存在一些冗余的字段,减少表与表之间的耦合程度,起到以空间换取时间的作用。

反范式化与范式化并不是相互对立的存在,而是相辅相成的,在设计数据库时,既不要完全遵守范式化,也不要可以去回避。

热点分散

场景:当某个计数字段被大量修改时,由于一次只能更新一条,频繁的更新会造成性能的下降

解决方式,将计数字段分成多条数据,每次随机抽取一条作为更新对象,要获取实际的统计信息时,把多条数据 sum起来,通过分散更新,提升性能

热点分散其实是个应用很广泛的思想,比如最常见的削峰填谷,就是把热点分散在不同时间上,缓解服务器的压力
又比如,多线程中的currentHashMap,其实也是用了分段思想,将热点分散在不同的数据段当中,以及addrlong这个原子类的自增,也同样时用了这样的思想

在我们平时设计项目时如果遇到类似的问性能问题,也可以多考虑考虑热点分散

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值