课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
数据库对于大多数的后台开发程序员来说还是需要重点掌握的开发技术之一,而今天我们就一起来了解一下,关于数据库开发都有哪些基础知识。
乐观锁与悲观锁
悲观锁
特征(what):每次操作数据都会加锁
常见例子:mysql中行锁表锁读锁写锁;java的中重量级锁synchronized
乐观锁
特征(what):操作数据时不加锁
实现方法(how):通过版本控制和cas算法实现
优点:适用于多读的应用类型,可以提高吞吐量
常见例子:java中的原子变量类(cas算法)
MVCC多版本并发控制
是啥(what):
可以认为是行级锁的变种,他在很多情况下避免加锁,花销更低
分类:
乐观并发控制和悲观并发控制
实现(mysal的innodb引擎):
通过在每行记录后面保存两个隐藏的列来实现,一个是保存行的创建时间,一个是保存行的过期时间。不过这里的时间指的是系统版本号
死锁(数据库的)
解释现象:两个或两个以上事务在同一资源相互占用,并请求锁定对方占用的资源,从而导致恶性循环的现象。
并发控制
解决问题:我在读数据,你在删数据的情况
锁分类:
读锁:共享锁,不阻塞
写锁:排他锁,排除其他写锁和读锁。
锁策略
解决问题:提高性能
分类:
>表锁:开销小
>行级锁:大程度支持并发,但开销大
范式分类
1nf:属性具有原子性
2nf:在1nf基础上消除非主属性对主码的部分依赖
3nf:在2nf基础上消除传递依赖
索引(书的目录)
解决问题(why):方便查找数据
优点:
大大减少服务器需要扫描的数据量
帮助服务器避免排序和临时表
将随机io变成顺序io
缺点:
时间:创建索引,维护索引需要时间
空间:创建索引占用物理空间
创建索引的原则
左前缀匹配原则,具体在联合索引体现,mysql会一直向右匹配,当遇到范围查询会停止,此时把范围查询的索引放到后即可
经常作为查询的字段作为索引
更新频繁的字段不适合做索引
定义有外键的字段一定要做索引
尽量扩展索引,不要重新新建索引
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。