【问题标题】:Concurrent database MVCC timestamp generation method并发数据库MVCC时间戳生成方法
【发布时间】:2016-07-14 23:50:50
【问题描述】:

我需要为 MVCC 快照隔离生成数据库时间戳。使用的典型方法:

"事务操作在 SI-TM 中实现如下。 TM BEGIN:生成事务的逻辑快照 通过使用原子增量获得唯一时间戳 到全局时间戳计数器。”

在具有数百个内核的系统中使用这种方法的问题在于它无法扩展。在有争议的内存位置上存在每秒 10M 原子增量的硬件限制。

有什么想法吗?

【问题讨论】:

    标签: parallel-processing atomic database-concurrency mvcc nosql


    【解决方案1】:

    这里有两个简单的想法,以及一篇论文参考:

    1) 不是将计数器增加 1,而是将其增加 N,从而有效地为客户端提供一系列事务标识符 [c, c+N)。例如,如果 N=5,并且计数器的初始值为 1,则客户端 A、B 和 C 将获得以下信息:

    A: [1, 2, 3, 4, 5]
    B: [6, 7, 8, 9, 10]
    C: [11, 12, 13, 14, 15]
    

    虽然这减少了原子计数器的压力,但正如我们从这个示例中看到的那样,一些客户端(如客户端 C)将获得相对较高的 id 范围,而另一些则获得较低范围(客户端 A),这将导致系统中的中止率更高。

    2) 使用interleaved 事务标识符的范围。这就像 1,但我们添加了一个步进变量 S。这是一个简单的示例:如果 N=5 且 S=3,并且计数器的初始值为 1,那么客户端 A B 和 C 将得到以下结果:

    A: [1, 4, 7, 10, 13]
    B: [2, 5, 8, 11, 14]
    C: [3, 6, 9, 12, 15]
    

    这似乎解决了1的问题,但考虑客户端D:

    D: [16, 19, 22, 25, 28]
    

    现在我们回到解决方案 #1 的问题。必须用这种技术玩技巧才能“正确”。

    3) 此处描述了一种有趣但更复杂的分散式交易 ID 分配方式:

    Tu、Stephen、Wenting Zheng、Eddie Kohler、Barbara Liskov 和 Samuel Madden。 “多核内存数据库中的快速事务。”在第 24 届 ACM 操作系统原理研讨会论文集上,第 18-32 页。 ACM,2013 年。

    【讨论】:

      猜你喜欢
      • 2011-08-22
      • 1970-01-01
      • 2011-03-12
      • 2014-01-27
      • 2010-10-23
      • 1970-01-01
      • 2021-11-27
      • 1970-01-01
      • 2020-08-28
      相关资源
      最近更新 更多