- 博客(9)
- 收藏
- 关注
原创 Fast Serializable Multi-Version Concurrency Control for Main-Memory Database Systems
之前也写过Hekaton的并发控制,主要是乐观的MVCC和验证来实现串行化的隔离级别。但是这种有一个缺点,对于OLAP场景来说,读取本来就占用了大量的开销,如果事务提交之前验证阶段再次读一遍,开销就太大了。本文主要的贡献就是如何减少OLAP的场景中,验证工作的负载。T5将sally的一块钱给了Henry,可以看到T5的undo buffer里面的值。修改的时候,直接将Tuple复制到undo-buffer中,然后in-place修改原来的Tuple,然后给undo buffer里面的。
2024-12-10 16:55:18
854
原创 High-Performance Concurrency Control Mechanisms for Main-Memory Databases
这个意思是,前一个事务还没有提交,后一个事务就读取了前一个事务修改的数据。如果前一个事务Abort了,后一个事务提交了,就会导致后一个事务读取到了脏数据。,这是一个无锁的hash table,图中可以看出bucket J连接了四条数据,John的三个版本以及Jane的一个版本。也可以存储在header的位置,存储在Begin位置意味着此条记录还没有被提交,不可以被其它事务读取,存储在End位置意味着此条正在被修改,阻止其它事务修改。本文实现了不阻塞的悲观锁,和乐观模式一样,用依赖来实现。
2024-12-10 16:54:27
1167
原创 H-Store and VoltDB
由于H-Store内部有重启事务的机制,所以一个事务可能被分配多个事务ID,当被分配一个新的事务ID之后,需要给前一个事务ID写一个失效的日志记录。之后所有的事务做的修改不会覆盖发生checkpoint时那一刻的数据,一旦所有分区确认启动checkpoint之后,H-Store提交检查点事务。在H-Store中,当一个事务访问一个没有上锁的分区时,那么事务就会rollback,释放事务获得的锁,然后当事务获得所需要的所有分区锁后再次执行事务。由于事务日志只记录提交的事务的日志,所以不需要回滚。
2024-12-10 16:53:42
451
原创 Hekaton: SQL Server’s Memory-Optimized OLTP Engine
假设事务Tx2的事务开始时间是100,它不仅会读取事务Tx1修改的记录,还会将记录<Greg, Beijing>更新为<Greg, Porto>,那么在事务Tx2执行更新操作的时候,发现记录<Greg, Beijing>的EndTs中记录的是TransactionId,而Hekaton会乐观的认为事务Tx1会coomit成功,所以Hekaton会立即abort事务Tx2。举个例子,事务tx1tx2,tx3串行执行,宏观上可以认为每个事务的读和写是同时发生的,这样每个事务就成为了一个个点,一串点就成了线。
2024-12-10 16:53:03
992
原创 Main Memory Database Systems: An Overview
数据库恢复需要将磁盘中的数据复制到内存中。这两个过程都需要加速:磁盘大Block、按需加载(而不是全部加载,其它部分后台异步加载)、磁盘阵列(并行读)。由于现在内存价格变得越来越便宜,可以考虑将数据全部放到内存中成为内存数据库(Main Memory Database System, MMDB)。和传统的磁盘数据库相比(Disk Resident Database System,DRDB),有以下一些不同之处。而对于MMDB,处理成本更加重要。相比于DRDB关注磁盘IO,对于MMDB关注CPU处理成本。
2024-12-10 16:51:42
913
原创 Hyper: A Hybrid OLTP&OLAP Main Memory Database System Based on Virtual Memory Snapshots
Redo-Log内容基本上和H-Store的command log一致,记录事务ID,存储过程,存储过程参数,,事务成功之后才写Redo-log。多线程模式,单分区事务并行写,跨分区事务串行写。如果没有Undo-log,那么生成快照是,只能在两个事务执行的中间生成快照,也就是必须在事务执行结束后才能为OLAP查询生成快照。此时快照上可能有未提交事务的数据,此时Hyper只需要将undo-log回滚一遍就好了,并且由于COW,可以很清楚的知道旧快照和最近版本之间的Undo-Log的范围。
2024-12-10 16:50:17
746
原创 加一
语言:Python3思路:首先for循环将数组变为字符串,然后转为int类型,加一之后转为字符串,转为数组。代码:class Solution: def plusOne(self, digits): digits = [str(i) for i in digits] digits = str(int(''.join(digits))+1) n...
2018-06-13 22:05:04
174
原创 移动零
移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。Python31class Solution:2 def moveZeroes(self, nums):3 """4 :typ...
2018-06-12 21:12:32
289
原创 LeedCode题目
思路:最简单的办法就是for循环,找到没有元素出现的个数,然后只要出现个数大于等于2,就return True,否则 return False.语言:Python3第一个阶段:for i in range(len(nums)): if nums.count(i)>=2: return True else: ...
2018-06-11 10:54:47
220
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人