前言 经过前面两个实验的铺垫,终于到了给数据库系统添加执行查询计划功能的时候了.给定一条 SQL 语句,我们可以将其中的操作符组织为一棵树,树中的每一个父节点都能从子节点获取 tuple 并处理成操作符想要的样子,下图的根节点 \(\pi\) 会输出最终的查询结果. 对于这样一棵树,我们获取查询结果的方式有许多种,包括:迭代模型.物化模型和向量化模型.本次实验使用的是迭代模型,每个节点都会实现一个 Next() 函数,用于向父节点提供一个 tuple.从根节点开始,每个父节点每次向子节点索取一个…
前言 这个实验有两个任务:时钟替换算法和缓冲池管理器,分别对应 ClockReplacer 和 BufferPoolManager 类,BufferPoolManager 会用 ClockReplacer 挑选被换出的页,并通过 DiskManager 将换出的页写到数据库文件中.下面介绍这两个类的实现过程. 代码实现 如果直接克隆 Bustub 仓库,得到的是 fall 2021 的实验代码,对于 fall 2019,可以将 commit 切换至 5972018: Fix typo in ty…
前言 这是 Fall 2019 的最后一个实验,要求我们实现预写式日志.系统恢复和存档点功能,这三个功能分别对应三个类 LogManager.LogRecovery 和 CheckpointManager,下面进入正题. 代码实现 日志管理器 为了达到原子性和持久性的目标,数据库系统会将描述事务所做修改的信息保存硬盘中.这些信息确保已提交事务中执行的所有修改都反映在数据库中,还可以确保系统崩溃并重新启动后,由中止或失败的事务所做的修改不会保留在数据库中.本次实验使用预写日志记录这些修改,预写日志…
前言 该实验要求实现一个基于线性探测法的哈希表,但是与直接放在内存中的哈希表不同的是,该实验假设哈希表非常大,无法整个放入内存中,因此需要将哈希表进行分割,将多个键值对放在一个 Page 中,然后搭配上一个实验实现的 Buffer Pool Manager 一起食用.哈希表的大致结构如下图所示: 下面介绍如何实现一个线程安全的哈希表. 代码实现 Page 布局 从上图可以看出,多个键值对被放在 Page 里面,作为 Page 的数据存在磁盘中.为了更好地组织和管理这些键值对,实验任务一要求我们实…
1):Hibernate 中Criteria Query查询详解 当查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中. 此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条件封装为一个Criteria对象. 在实际应用中,使用Session的createCriteria()方法构建一个org.hibernate.Criteria实例,然后把具体的查询条件通过Criteria的add()方法加入到Cr…
最近开始学习完整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原来的应用场景是对电商网站中输入一个错误的商品名称进行智能纠错,比如iphoae纠错为iphone.以下介绍的这个版本对其作了简化,项目源代码地址参见我的github:https://github.com/jianxinzhou/MyProject_1/tree/uint32 . 该Project的主要思想是利用字符串编辑距离来实现拼写纠错.每当客户端来一个查询词,服务器返回与其编辑距离在2以内的单词中词频最高的那个单词.以下是对该项目的简要介绍与分析,具体代码仍以github中…
应公司要求,需要加强对项目的管理.安排我学习一下微软的Project是如何进行项目管理的,并且在公司服务器上搭建出这样的一个项目管理工具.可以通过浏览器就可以访问.我因为用的单机是Project Prorofessional 2010,所以就直接选择了Project Server 2010 作为安装版本软件,部署在公司的服务器上.经过几天的学习和实践,成功地将Project Server 2010 运行起来了.特在此做一下总结.记录自己犯的错和一些重要配置过程,个人认为不是很难,而是要有细心和耐…
注:本片整理自 http://blog.csdn.net/wssiqi/article/details/8132603 1.获取联系人姓名 一个简单的例子,这个函数获取设备上所有的联系人ID和联系人NAME. public void fetchAllContacts() { ContentResolver contentResolver = this.getContentResolver(); Cursor cursor = contentResolver.query(android.provi…