Week Log Entry No.2

Mindset

这一周的情绪比上一周有了很大提高。逐渐将自己的思维重心放回到了程序上,比起上周的萎靡不振的状态,这周能更专注的坐下来解决代码设计问题和一些bug。

但这一周是临近开学的前一周,夹杂着面对全新同学和全新环境的不适以及开学抵触情绪,导致我每天晚上并不能很快的睡着,通常需要睡眠曲或者一些公开课来助眠。

对于思维层面的训练,这周并没有很大的提升。

Fitness

做了一次肩部训练。两次室外6km步行,虽然只是简单散散步。

Entertainment

Apex这周也玩的很少了,基本隔一两天才会上一次线。

这周的空余时间回顾了《我们的父辈》,一部德国视角下的二战片。片中的弟弟从刚开始的反对战争逐渐变得麻木不仁,之前五个好朋友相聚在酒馆一起喝酒的日子再不复返。战争会放大一个人邪恶的一面,希望我们仍能保持和平,远离战争给所有人带来的痛苦。

周六中午吃了一顿大餐,晚上又吃了一顿火锅,简直是对我胃的挑战🫠。

Music in this week:Alright - By Fulton Lee 调子给人一种焕然一新的感觉,但遗憾的是Apple music没找到,只能换到网易云去听。

Learn

Books:

  • DDIA: part of Chapter 3
  • Database Management Systems: Chapter 18 Concurrency Control - 2PL

上周读了DDIA第三章对于索引的介绍,这周对事务处理和分析处理(OLTP & OLAP)的workload做了一个简单的回顾。基于读写特征而言,二者之间的区别是OLTP倾向于随机访问并且返回较少数量的数据,而OLAP需要对大量数据进行分析和汇总;基于面向用户角度而言,OLTP大多面向终端用户,而OLAP则是通过对数据分析,为公司决策提供数据支持。

简要阅读和回顾了DBMS的二阶段锁协议,书中也提到了对Lock Manager这一中心化管理锁的实现。Lock Manager的基本思路是,维护系统中当前的资源锁表,table lock以及row lock,来标识某一个table或者row当前被哪些事务所访问,又有哪些事务等待这个资源。Lock Manager负责统筹安排锁分配的流程,并由于其有全局的视角,在Lock Manager内部就可以并行构建一个事务有向图,来检测当前是否存在死锁状况,并解除死锁。

Coding:

这周重心基本在15-445的project 4上面,完成了Lock Manager和Deadlock detection算法。对于Lock Manager的实现,lock和unlock的基本思路较为简单,复杂的地方在于对于不同的事物隔离级别以及事务状态的条件判断。通过跑gradescope的在线测试,发现之前让chatgpt写的锁兼容矩阵完全是错的,找这个bug找了整整一下午...,没想到问题出在了这里。实现Deadlock detection的过程显得没有很得心应手,一个原因是因为对STL的很多容器特性还不够熟悉,分析一个算法时,不会熟练的考虑这个场景下使用哪种容器最合适,这一部分需要加强;另一个部分就是对DFS的算法使用还不是很熟练,实现起来总是磕磕绊绊,考虑的东西复杂。在Deadlock detection中也解决了两个bug:

  • Lock Manager的condition check中,如果当前事务被deadlock detection abort,那么在唤醒进程之后应该返回true,然后对其abort状态处理。之前的实现中,没有对其进行判断,所以会导致出现在死锁检测算法中无限循环的情况。
  • Deadlock detection构建的waits-for图不是有序的,项目要求从低transaction id到高id依次遍历,所以需要对构建好的图进行排序。

还没有实现concurrent query execution。

最近Oceanbase大赛开启报名了,打算先把15-445刷完再开始找队友。