huadb_lab3
万圣节问题的底层逻辑是,update操作Update id = id+1会新增插入数据,然后scan操作又把新插入的数据视作原来表中的数据,重复删除新增的数据再插入数据如此反复导致死循环。update操作需要使用扫描表中符合条件的行,可以发现update执行器有子执行器,其实就是scan执行器,所以这两个操作的事务id和sql语句是相同的。只需在scan环节对元组做判断是否为相同的事务id和sql语句cid,相同则不送出该元组(火山模型,一次只返回一行)
实现mvcc,使用事务版本号(某种意义上是逻辑时间戳)。每个事务都有一个唯一的事务ID,被称为XID。注意:除了被BEGIN - COMMIT/ROLLBACK包裹的一组语句会被当作一个事务对待外,不显示指定BEGIN - COMMIT/ROLLBACK的单条语句也是一个事务。
本实验框架和pgsql的mvcc相似,其实现原理如下:
1)数据文件中存放同一逻辑行的多个行版本;2)每个行版本的头部记录创建该版本的事务ID以及删除该行版本的事务的ID(分别称为xmin和xmax);3)系统保存了每个事务的状 ...
huadb_lab2
本实验的redo log和undo log均为物理日志,共用同一份日志文件,也就是redo/undo log。undo log采用物理日志来回滚一个事务的实现为:在内存中维护一个活跃事务表,记录每一个活跃事务的最后一条操作的LSN位置,根据这个位置获取日志记录log_record,每个record_log都有该事务的上一条record_log的lsn,直到读取到事务的begin_log_record为止,就可以依次将一个事务的全部操作撤销。在mysql中redo log是物理日志,而undo log是逻辑日志
物理日志记录的是页面数据的更改例如在本实验中,一条插入日志的内容如下:事务id,对象id,当前页id,页内的slot id,改动数据所在页内偏移,记录的数据大小,记录的数据内容
在实验框架中,LSN 使用的是日志记录在日志文件中的位置表示,这种表示方法可以方便地通过 LSN 直接获取日志,无需再单独存一份 LSN 到日志位置的映射表。
首先说说幂等性:即同个操作无论做了多少遍,结果都是一样的,有f[f(x)] = f(x),为什么需要保证幂等性呢?考虑一个问 ...
博客报告
本人的博客是用Hexo生成的,下面来介绍下hexo和搭建过程。
Hexo是一个快速、简单且强大的静态博客框架,它使用Node.js为平台。以下是关于Hexo的简介:
Hexo:静态博客框架
快速: 使用最先进的技术,如Node.js,Hexo可以在几秒钟内从数百个文件生成静态网页。
简单: 一个简洁的命令行工具和易于配置的文件,使得使用Hexo开始写博客变得非常简单。只需一条命令就可以启动服务器,一条命令发布新文章。
Markdown 支持: 通过Markdown,您可以轻松写作。Hexo还支持GitHub Flavored Markdown、Octopress等的插件。
扩展性强: Hexo拥有强大的插件系统,你可以使用npm安装更多插件,满足各种需要。它也支持主题,允许用户轻松更改网站的外观和感觉。
一键部署: 内置一键部署功能,可以方便地将网站部署到GitHub Pages、Heroku或其他地方。
前置知识学习Hexo之前,你需要了解以下技术或软件:
Node.js: Hexo是基于Node.js构建的,因此你需要了解Node.js的基础知识。
npm (Node Pack ...
底层面经
LSM Tree读写流程lsm-Tree适合写多读少的场景。日志结构合并树,它由三部分组成:memtable、immutable memtable和sstable。在内存,即memtable中维护以键排序的数据结构如跳表、b+树等,数据的插入、修改、删除首先在内存中进行,而且不像b+树,数据在原地修改,而是像日志一样以append方式,把数据的更新以记录形式append到内存(行的多个版本)。待写满后冻结memtable转为immutable memtable,变为只读,为了避免阻塞后续的更新,会创建一个新的memtable接替原来的memtable负责写,immutable memtable写入磁盘,形成sstable,每个immutable memtable对应一个sstable,全称为Sorted String table,它是位于磁盘上的一种持久化、有序且不可变的键值存储结构,它内部包含一系列可配置大小的Block(默认大小一般是64k)。Block的索引存储在尾部,当SSTable打开时,索引被加载到内存。然后根据key在导入内存里面再进行二分查找,找到key对应的offse ...
leetcode
移除数组的重复元素首先处理特殊情况:如果数组长度为0,直接返回;因此从下标1开始处理数组,由于给定的数组 nums 是有序的,对于i <= k <= j ,有nums[i]=nums[k]=nums[j]设置快慢指针slow ,fast, 均从1开始,nums[0~slow-1]是不重复的被保留数组元素若nums[fast] != nums[slow - 1],则说明当前元素与被保留数组的元素都不一样,可以纳入被保留数组直接让nums[slow] = nums[fast]
移除数组的重复元素2处理特殊情况:如果数组长度< 2,直接返回;从下标2开始处理数组,快慢指针slow,fast均为2,nums[0~slow-1]是能够被保留的数组元素若nums[fast] != nums[slow - 2],也就是说如果当前元素与被保留的元素中倒数第二个元素不一样,那么说明该元素与被保留数组的最后两位元素都不一样,可以纳入被保留数组,即让nums[slow] = nums[right],slow++ ...
这是smog1995的个人博客
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment