最近在学习数据库相关的东西,有趣点也是很多的。简单罗列下吧:

在基础概念上,主键,索引,外键形成表,表关系,数据库。
数据库开发实践过程中,生成了各种规则,最佳实践,类似于第三范式这种。

在底层上,算法的不断改进,保证 CRUD 的效率,并且对于不同的业务需求,项目大小,又有不同的数据库引擎,数据库产品。

7cc829d3jw1f3drdtcrs7j20dq0fijtz

  • 算法
  • 文件管理
  • SQL 与解析器
  • 表关系: 主键,外键
  • 事务
  • 备份
  • 网络

在应用开发层面: 表关系,主键设计这些算是大头。
在原理层面: 关务事务,也是很有意思的。

ACID事务的概念。

“I’m on acid”
一个ACID事务是一个工作单元,它要保证4个属性:

  • 原子性(Atomicity): 事务『要么全部完成,要么全部取消』,即使它持续运行10个小时。如果事务崩溃,状态回到事务之前(事务回滚)。
  • 隔离性(Isolation): 如果2个事务 A 和 B 同时运行,事务 A 和 B 最终的结果是相同的,不管 A 是结束于 B 之前/之后/运行期间。
  • 持久性(Durability): 一旦事务提交(也就是成功执行),不管发生什么(崩溃或者出错),数据要保存在数据库中。
  • 一致性(Consistency): 只有合法的数据(依照关系约束和函数约束)能写入数据库,一致性与原子性和隔离性有关。

在往底层看一看,不同的引擎实现也可以关注,不过现在是没心情继续看了。但是通过引擎,也算是了解到物理层面的数据结构。

数据库各部分解耦,分为不同的组件,各司其职,web 开发也在这个方向走。各类技术基本是在踏着之前的路子,毕竟是站在巨人的肩膀上。

总是上面那么些杂七杂八的废话,就是说明要扩展的技术层面,自己目前的广度太有限了。不能仅仅是在使用的层面上,要去深入思考,思考为什么这样做,这样做的好处在哪,解决了什么问题。品味背后的思想,设计,别人当初的想法,是否可以用到其他层面。因为不管怎么学啊,做啊,还是要关注其价值的。是否能够提升个人的技术理解力,是否能够应用到当前的业务中。