tikv pd tso 时间戳 - 在线转换小工具
1 tso 概述
TSO 是一个全局的时间戳,它是 TiDB 实现分布式事务的基石。所以对于 PD 来说,我们首先要保证它能快速大量的为事务分配 TSO,同时也需要保证分配的 TSO 一定是单调递增的,不可能出现回退的情况。
TSO 是一个 int64 的整形,它由 physical time + logical time 两个部分组成。Physical time 是当前 unix time 的毫秒时间,而 logical time 则是一个最大 1 << 18
的计数器。[1]
2 在线转换
TikV TSO 时间戳转换工具
TSO 转换为现实时间
转换结果:
现实时间(UTC)转换为 TSO
转换结果:
3 go 例程
package main import ( "fmt" "testing" "time" ) func TestParseTso(t *testing.T) { fmt.Println("timestamp:", time.Unix((451535280537600000>>18)/1000, 0).String()) } func TestGetTso(t *testing.T) { ts := time.Date(2024, 8, 1, 0, 0, 0, 0, time.UTC) unixMillis := ts.UnixNano() / int64(time.Millisecond) tso := unixMillis << 18 fmt.Printf("tso: %d\n", tso) }
参考文章
[1] https://cn.pingcap.com/blog/placement-driver/
[2] https://ipotato.me/article/67
界面丑了点,但希望有用