数据库开发

Kaleido Lv4

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