【问题标题】:BLink Tree insert operationBLink 树插入操作
【发布时间】:2019-10-21 00:21:54
【问题描述】:

Lehman and Yao (1981) 中引入的B-link tree 声称any insert operation need at most 3 locks simultaneously

我很难找到获取 3 个锁的具体场景。 场景是什么?

【问题讨论】:

    标签: database database-locking


    【解决方案1】:

    场景出现在:

    1. Split Leaf。 一个叶子节点(最初是A)被拆分(分成A1A2),因此需要将拆分键(max(A1))插入父节点( T)。
    2. 父节点有链接。父节点T 也有一个指向S 的有效链接指针。该值必须插入S 而不是T

    三把锁分别是:

    1. 在叶节点A1:防止该节点(以及其链接指向的节点)进一步分裂
    2. T 上:当Move.right 执行时(见下文)。
    3. S 上:当Move.right 执行时(见下文)。
    [Move.right]
    while True:
      S = scannode(v, T)
      if isLinkPointer(S):
        lock(S)   # <-- 3 locks *
        unlock(T) # <-- 2 locks
        T = S
    

    锁 2 和 3 更像是向右移动时必须获取的“转换锁”。因此,3 次锁的场景真的只是很短的时间。

    A Crude Graphic Illustration.

    【讨论】:

    • 如果1.我们在获取父锁之前释放叶子锁会出现什么问题? 2. 同级右移链接前释放原父锁?
    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多