最近在学习数据库相关知识,首当其冲的入门课程就是著名的CMU15-445,在此记录下学习2023 fall课程的一些过程。
2023-11-28~2023-12-01
大致用了几天的时间,完成了Project#0的一个学习,总体来说感觉有些难度,编码逻辑与过程比较清晰,但是debug的过程就走了不少的弯路,花费了大量的时间。
项目总体介绍:
整体的要求是完成一个写时复制的树形数据结构,包含三个不同的部分:TrieNode、TrieNodeWithValue、Trie,前两个是树中两种不同类型的节点(即节点中是否存在value),Trie是整体的一个树形结构。
Step1:写时复制
这个过程要求完成一个Trie结构的写时复制,主要是针对于Put与Remove方法的。对于Get方法来说,只是一个根据Key获取Value的一个过程,需要注意的时当Key为空串时,是在根节点root上获取value,相对的在Put方法中,key的参数也可以为空串。
对于Put来说我的思路下有两种情况,第一种是更新一个节点的值,这个节点有可能是有值的,也有可能是没有值的;第二种情况就是加入一个或多个全新的节点,用最后一个节点来存储value。在整个存储的过程中,因为Put方法的要求是最后返回的是一个新的Tire结构,这就使得我们在从根节点出发寻找插入位置的过程中,需要不断把遍历过的节点用Clone方法复制,直到找到插入位置或是在节点上Overwrite。为了完成这个过程,我采用的方法是双指针,pre和next,将新的节点与前一节点复制并连接,然后进行插入操作,最终返回的是一个全新的Trie结构。
对于Remove方法,他要求我们同样返回新的Trie结构,做法和Put类似,就是找到节点后将节点delete即可,同时要注意题目中要求将其他无效节点一并删除掉,这需要在某些情况下进行一些剪枝的操作。
Step2:并发存储
这一部分相对简单,只需要活用rootlock和writelock即可,是比较基础的内容
Step3、Step4:调试与Sql Function:
调试上花了很多时间,主要还是自身的经验与水平还不熟练,犯了一些逻辑上的错误,同时对于智能指针的使用不是很熟练,一时半会儿没有转过弯来,其实是些比较基础的问题,还是需要加强对于新特性的学习,并且加大平时使用的频率,强迫自己去使用,养成良好的习惯。Sql的函数很简单,就是简单的大小写转换,几行代码就可以搞定。同时也用了一下CMU的bustub来给写好的结构进行必要的测试,结果也没什么问题。
2023-12-01~2023-12-02
完成了一下课程中的homework1,虽然之前有上过数据库的课程,但是sql语法什么的还是忘记的比较多,就做了一下这10道sql联系来回想一下,总体感觉是比较基础的,但是可能我终究还是不够熟练,也花费了几个小时在上面,基础上面需要加强的地方还有很多。
接下来就是继续去看课程,继续完成剩下的Project,希望在这个过程中能不断进步吧。