1

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

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

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

有任何想法吗?

4

1 回答 1

0

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

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) 使用交错事务标识符的范围。这就像 1,但我们添加了一个步进变量 S。这是一个简单的示例:如果 N=5 和 S=3,并且计数器的初始值为 1,那么客户端 AB 和 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 的方式:

涂、斯蒂芬、郑文婷、埃迪·科勒、芭芭拉·利斯科夫和塞缪尔·麦登。“多核内存数据库中的快速事务。” 在第 24 届 ACM 操作系统原理研讨会论文集上,第 18-32 页。ACM,2013 年。

于 2016-08-03T00:36:58.477 回答