前言 这是 Fall 2019 的最后一个实验,要求我们实现预写式日志.系统恢复和存档点功能,这三个功能分别对应三个类 LogManager.LogRecovery 和 CheckpointManager,下面进入正题. 代码实现 日志管理器 为了达到原子性和持久性的目标,数据库系统会将描述事务所做修改的信息保存硬盘中.这些信息确保已提交事务中执行的所有修改都反映在数据库中,还可以确保系统崩溃并重新启动后,由中止或失败的事务所做的修改不会保留在数据库中.本次实验使用预写日志记录这些修改,预写日志…
前言 这个实验有两个任务:时钟替换算法和缓冲池管理器,分别对应 ClockReplacer 和 BufferPoolManager 类,BufferPoolManager 会用 ClockReplacer 挑选被换出的页,并通过 DiskManager 将换出的页写到数据库文件中.下面介绍这两个类的实现过程. 代码实现 如果直接克隆 Bustub 仓库,得到的是 fall 2021 的实验代码,对于 fall 2019,可以将 commit 切换至 5972018: Fix typo in ty…
前言 该实验要求实现一个基于线性探测法的哈希表,但是与直接放在内存中的哈希表不同的是,该实验假设哈希表非常大,无法整个放入内存中,因此需要将哈希表进行分割,将多个键值对放在一个 Page 中,然后搭配上一个实验实现的 Buffer Pool Manager 一起食用.哈希表的大致结构如下图所示: 下面介绍如何实现一个线程安全的哈希表. 代码实现 Page 布局 从上图可以看出,多个键值对被放在 Page 里面,作为 Page 的数据存在磁盘中.为了更好地组织和管理这些键值对,实验任务一要求我们实…
前言 经过前面两个实验的铺垫,终于到了给数据库系统添加执行查询计划功能的时候了.给定一条 SQL 语句,我们可以将其中的操作符组织为一棵树,树中的每一个父节点都能从子节点获取 tuple 并处理成操作符想要的样子,下图的根节点 \(\pi\) 会输出最终的查询结果. 对于这样一棵树,我们获取查询结果的方式有许多种,包括:迭代模型.物化模型和向量化模型.本次实验使用的是迭代模型,每个节点都会实现一个 Next() 函数,用于向父节点提供一个 tuple.从根节点开始,每个父节点每次向子节点索取一个…
      Python的logging模块详解 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志级别 日志级别指的是产生的日志的事件的严重程度. 设置一个级别后,严重程度低于设置值的日志消息将被忽略. 常见的日志级别及其对应的数值如下所示: CRITICAL: 对应数值为50,使用critical()方法调用. ERROR: 对应数值为40,使用error()方法调用 WARNING: 对应数值为30,使用warning()方法调用,该级别为默认级别. INFO:…
最近开始学习完整iOS项目的开发流程和思路,在实际的项目开发过程中,我们通常需要对项目代码和资料进行版本控制和管理,一般比较常用的SVN或者Github进行代码版本控制和项目管理.我们iOS项目的开发工具Xcode本来就集成了Github的代码控制,所以用GitHub会更方便一些,想具体了解Xcode和GitHub链接具体操作步骤的小伙伴可以戳这里:iOS学习--Xcode9上传项目到GitHub. 创建完项目之后,我们再对一个项目进行代码开发之前,我们首先需要对iOS项目的开发环境进行搭建,我…
前言 这个实验主要用来测试大家对现代 C++ 的掌握程度,实验要求如下: 简单翻译一下上述要求,就是我们需要实现定义在 src/include/primer/p0_starter.h 中的三个类 Matrix.RowMatrix 和 RowMatrixOperations,其中 Matrix 是 RowMatrix 的父类,RowMatrixOperations 定义了三个用于数组运算的成员函数:Add.Multiply 和 GEMM(就是 \(\boldsymbol{A}*\boldsymbo…
应公司要求,需要加强对项目的管理.安排我学习一下微软的Project是如何进行项目管理的,并且在公司服务器上搭建出这样的一个项目管理工具.可以通过浏览器就可以访问.我因为用的单机是Project Prorofessional 2010,所以就直接选择了Project Server 2010 作为安装版本软件,部署在公司的服务器上.经过几天的学习和实践,成功地将Project Server 2010 运行起来了.特在此做一下总结.记录自己犯的错和一些重要配置过程,个人认为不是很难,而是要有细心和耐…
一.简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 输出: WARNING:root:warning messageERROR:root:error messageCR…
简单将日志打印到屏幕: import logging logging.debug('debug message') logging.info('info message') logging.warning('warning message') logging.error('error message') logging.critical('critical message') 输出: WARNING:root:warning messageERROR:root:error messageCRIT…