CRC64 校验和 是指什么?

ADMIN CHECKSUM TABLE 语句用于计算表中所有行和索引的 CRC64 校验和
这里的 CRC64 校验和 是指什么呢?为什么要校验呢?
https://docs.pingcap.com/zh/tidb/v4.0/sql-statement-admin-checksum-table#语法图 文档中没有说明,请补充

3 Likes

看下这个帖子
https://blog.csdn.net/weixin_35936248/article/details/115063024

3 Likes

对这个了解不深

1 Like

在 TiDB Lightning 等程序中,可通过此语句来确保导入操作成功。
官方文档 这个意思是 在导入后,在主备库 分别执行 ADMIN CHECKSUM TABLE ,要保持值一致吧?

1 Like

crc校验在修计算机网络的时候会讲吧,目的是为了保证数据在客户端和服务器之间传输时数据完整性的校验。

1 Like

checksum原理看这两个文档
https://docs.pingcap.com/zh/tidb/stable/tidb-lightning-glossary/#checksum
https://en.wikipedia.org/wiki/Cyclic_redundancy_check

3 Likes

供参考:https://www.alibabacloud.com/help/zh/doc-detail/43394.htm

1 Like

crc 是一种校验算法 类hash算法。
crc16(redis中哈希一致性的算法)
crc32和crc64 也都是校验算法(只是减少了碰撞概率)。
crc的算法可以快速校验 通常用在比对 一致性的场景下。

具体的crc64的实现可以查看tidb中的 源码:checksum.go中


// Update add batch of kvs with their values.
func (c *Checksum) Update(kvs []Pair) {
	var (
		checksum uint64
		sum      uint64
		kvNum    int
		bytes    int
	)

	for _, pair := range kvs {
		sum = crc64.Update(0, ecmaTable, pair.Key)
		sum = crc64.Update(sum, ecmaTable, pair.Val)
		checksum ^= sum
		kvNum++
		bytes += (len(pair.Key) + len(pair.Val))
	}

	c.bytes += uint64(bytes)
	c.kvs += uint64(kvNum)
	c.checksum ^= checksum
}
1 Like

这个说明清晰明了,感谢

1 Like

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。