TiKV TSO 时间戳 - 在线转换工具

2024年8月31日 1625点热度 0人点赞 1条评论

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

SPtuan

团子最大的愿望是度过平静的时光。 当前从事分布式存储研发工作。

0 0 votes
文章评分
Subscribe
提醒
guest

1 评论
最新
最旧 得票最多
Inline Feedbacks
View all comments