数据库开发
1 开发中的数据库问题
1.1 黑盒问题
- 不能把数据库当成“黑盒”使用,因为每个数据库都是非常不同的
- Oracle和MySQL的差别,类似
- Windows和Linux的差别;iOS和Android的差别
- 虽然都是DBMS,但它们也有相当的差异
- Oracle的连接是很重的(需要预先处理很多东西,所以反复断开和连接会导致性能下降),而MySQL的连接是很轻量的
1.2 并发控制
- 现实存在并发,我们需要保持数据的一致性,所以要做并发控制
- 锁机制,使得并发控制成为可能
- 不同的数据库,实现锁机制是不一样的
1.2.1 比如:Oracle的锁机制就比较特别
1.2.1.1 Oracle存在有时读不到正确数据的现象
T6时刻,Transaction1能提交吗?
- 如果接受了提交,那么就会得到错误的值(Oracle的实现)
- 如果不接受提交,那么需要检查时间戳然后退回
Oracle的多版本控制,读一致性的并发模型
- 读一致查询:对于一个时间点(point time),查询会产生一致的结果(永远能够读到开始读的时间点的数据,而不是后来修改后的数据)
- 非阻塞查询:查询不会被写入器阻塞,但在其它数据库中可能不是这样的
1.2.1.2 Oracle这种锁机制的好处是什么?
例:ACCOUNTS(account_number, account_balance)一个银行的账户余额
为了简单,只考虑一个仅有四行的表(同时假设每个数据库块中只存放一行数据)
| 账户 | 余额 |
|---|---|
| 1 | 500 |
| 2 | 250 |
| 3 | 400 |
| 4 | 100 |
我们想运行一个日报表,了解银行里有多少钱。下面是一个非常简单的查询:select sum(account_balance) from accounts;
Oracle:读不阻塞写,可以极大地提升数据库的吞吐能力
1.3 对程序员的影响
对大多数码农而言,数据库锁机制好像都是自动和透明实现的,那么深入了解每个数据库的锁机制实现细节,对码农编码有什么影响吗?
Oracle的无阻塞设计有一个副作用,就是如果确实想保证一次最多只有一个用户访问一行数据,就得开发人员自己做一些工作。
- 不能把数据库当成黑盒使用:必须深入了解你所使用的数据库的体系结构和特征
- 什么时候,码农需要自己考虑并发的问题?不知道,看情况
关于黑盒问题的总结
- 数据库是不同的。在一个数据库上取得的经验也许可以部分应用于另一个数据库,但是必须有心理准备,二者之间可能存在一些基本差别,可能还有一些细微的差别。
- 细微的差别(比如对NULL的处理)与基本差别(如并发控制机制)可能有同样显著的影响。
- 了解数据库,知道它是如何工作的,它的特性是如何实现的,这是解决这些问题的唯一途径。
- Title: 数据库开发
- Author: Kaleido
- Created at : 2024-06-09 15:23:00
- Updated at : 2024-06-19 10:46:51
- Link: https://redefine.ohevan.com/2024/06/09/2024-spring-数据库开发/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments