时间:2021-07-01 10:21:17 帮助过:47人阅读
因为他讲了绝大部分上面提到的技术,latch-free的数据结构,MVCC,基于内存的索引实现,关于提升编译和执行效率那块,我直接跳过了
剩下关键的,就是如何保证MVCC是serializable
MVCC一般都提供SI的隔离性,SI不是serializable的
因为serializable要求,读写在逻辑上同时发生
而SI明显不是,读是在产生Snapshot的时候,写是在commit的时候
那如果要做到serializable,方法也很直觉,那就是虽然读写不同时,但是如果可以保证,我在commit的时候,之前读到的内容没有改变,那就等同于读写同时
所以只要做到,可重复读,无幻读
这个过程,就是乐观并发控制中的,validation的过程,这个详细可以看andy的数据库课程
关键是,你要记录下,read set和scan set,然后在commit的时候,去check这些读过的数据
后面两个问题,是内存数据库特有的
第一个是持久化,内存的数据,不能说丢就丢了
持久化的方法,首先,Transaction log,这个和wal有些不同,是在commit的时候去记录一条log,但是如果要提升效率,还是要batch commit
再者,就是checkpoints,缩短恢复周期
第二个是GC,回收内存,不能内存就爆了
GC比较有参考意义的是,它如何判断哪些version可以被过期了
这篇文章的参考意义,在于他把内存数据库的方向,和碰到的问题还是说的比较清晰的
Hekaton: SQL Server’s Memory-Optimized OLTP Engine
标签:partition 存在 nap 高效 内存数据 很多 server 判断 重复