CMU15445 2022笔记(并发、多线程 & 聚集与排序)

8、并发处理,多线程

这些数据库是单线程操作,一次只能单用户操作

并发操作要达到两个目标:

1、logical correctness:逻辑上的正确,即一个线程所能访问的应该是其应该访问的数据

2、physical correctness 物理正确,数据内部表示是否稳定

Locks VS latches:

lock:逻辑上宏观的锁,保护不被其他的事务修改,针对事务。且支持回滚

latch:物理上的结构,锁的是操作过程,不需要去进行回滚问题

Latches modes

read mode(读锁,共享锁): write mode(写锁,独占锁):;只有读锁(共享锁)和读锁才可以兼容

Mutex

1、blocking OS mutex(阻塞式的操作系统锁):不能应对大规模的多线程并发,如果一个线程进来锁住了一个变量,另一个线程会检查这个变量,然后这个线程会直接进入内核态然后进行sleep等待解锁将其唤醒。

2、Test-and-set spin latch(TAS:自悬锁):很高效,但是无法大规模因对并发。设置一个标志位latch,若锁了则为1,不锁则为0,然后再用户态不断循环检测latch直到这个锁解开。要注意的是,当检测到解开之后,重新上锁的过程中不能让其他线程对其进行操作

3、读锁-写锁:还是依赖于自悬锁,若写锁来了则读锁停止继续加锁,直到之前的读锁解开,让写锁完成才可以继续加锁

Hash table latching

1、page latches:哈希表都是分段存储,那么hash的时候也进行分段加锁,因此不用维护太多的锁

2、slot latches:按槽加锁,但是需要维护的锁就更多了,多少个槽就多少个锁

3、compare-and-swap():线程先读取,例如下面先看下面是不是20是的话锁住,读取之后锁住,然后再设置新的值;另外的线程则后续等待(),主要是要获取原值的大小,若原值大小不符则失败,失败之后再进行自悬操作。

B+树的并发操作

允许多线程的读写操作:保护节点内部数据、节点节点之后的分裂合并操作。若不进行并发控制,则删除一个数之后会进行rebalance操作,这时候T2线程进行查找就可能找不到41。

1、crabbing/coupling():基本思路:搜索的话先进行锁根,然后往下锁子树,再判断(判断分裂和合并会不会影响上部)上面的节点能否解锁。

find 38

delete 38 C点的时候发现就算删点38也不会触发合并或者分裂操作判断为安全

观察:不管怎么操作第一步就是锁根节点,B+树还支持叶子节点的扫描,但是B+树不支持死锁检测,因此需要自己设定一些规则,比如只支持从小到大的索引

9、排序与聚集

sorting algorithms(排序算法)

若数据不大,都在内存之中则可以直接用之前数据结构中的排序算法进行,但是若数据很大,则难以将其全部存在内存中去,就需要用到其他的算法。

External Merge Sort

外部归并排序,数据在磁盘上,先sorting再merge。

sorted run:一列K/V进行排序。V的分类分为早物化(排完之后直接把东西都跟到后面)和晚物化(id跟在后面,后续用id去找其他的)

2-way external merge sort:逐个放到内存中进行排序,然后将排完的再放进内存进行排序,得到最后的结果

double buffering optimization:第一个页在进行排序的时候,预先把第二个页读进来,而后进行操作。

general external sort:

Aggregation(聚集)

利用排序做聚集做去重

Group By DISTINCT没有排序时,自己排序开销比较大,

Hashing Aggregate:

Group By(把所有相同的数据堆在一起进行计算) DISTINCT(去重)

External hashing Aggregate

partition:

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值