在变更数据捕获 (CDC) 中,为什么使用 lsn 而不是时间戳?

jac*_*ill 7 sql-server-2008 change-data-capture

我正在学习在 SQL Server 2008 中使用 CDC,我读过 LSN 总是递增并且基于时间戳,所以为什么需要 LSN,如果它是根据时间戳计算的,可以用作所做更改的增量序列 ID。我相信 lsn 还会有其他一些用途。

gbn*_*gbn 11

通常认为日期/时间值不够独特。无论您如何定义它,对于相同的日期时间值都有可能发生 2 个操作。

在 SQL Server 2008 之前,最准确的值是四舍五入的 3.33 毫秒,datetime这确实是永恒的。datetime2解析为 100 纳秒,这也不够准确。

从另一个角度来看,时间是一个实数。无论您存储时间有多准确,总有一些舍入到您的分辨率级别(在这种情况下,3.33 ms 或 100 ns)

使用LSN(即numeric (25,0))给出了严格单调递增的明确整数值。是一个自然数

  • 大多数 RDBMS 都这样做——例如,Oracle 使用系统更改号 (SCN)。 (2认同)