gpt4 book ai didi

database - UnixNano 与服务器 ID 串联是一个好的主键吗?

转载 作者:IT王子 更新时间:2023-10-29 01:44:51 25 4
gpt4 key购买 nike

我尝试从 Go 的 UnixNano 生成 10k 整数,但没有显示任何冲突。

package main

import (
"fmt"
"sync"
"time"
"strconv"
"github.com/OneOfOne/cmap"
)

func main() {
var wg sync.WaitGroup
k := 1000
wg.Add(k * 1000)
coll := cmap.New()
for z := 0; z < k*1000; z++ {
go func() {
k := strconv.FormatInt(time.Now().UnixNano(),36)
if coll.Has(k) {
fmt.Println(`collision: `, k)
}
coll.Set(k,true)
defer wg.Done()
}()
}
wg.Wait()
}

数据库最多只支持64位整数,不支持原子计数器/序列。

EDIT 2017-03-06 它有碰撞

collision:  bb70elvagvqu
collision: bb70elwbgk98
collision: bb70elwnxcm7

因此,如果我使用该数字创建一个主键,将其转换为 base-36,并附加 3 位服务器 key ,就不会发生冲突吗?

一些例子:

  0bb4snonc8nfc001 (current time, 1st server)
1y2p0ij32e8e7zzz (maximum value: 2262-04-11 23:47:16.854775807, 46654th/last server)

要求 2017-03-04

  • 字典序正确
  • 独一无二
  • 尽可能短
  • 按创建时间排序

最佳答案

您没有指定要使用哪个数据库,但我想它是 MySQL。目前我认为最好的唯一ID是UUID MySQL 提供将其用作主键。

create table users(id varchar(36), name varchar(200));
insert into users values(uuid(), 'Andromeda');

它在每种情况下都提供一个唯一的 ID。

当然你可以在任何其他数据库中使用它,因为支持它的 Golang 和数据库。你可以在 Github 上找到许多 Golang 的 UUID 生成器。

关于database - UnixNano 与服务器 ID 串联是一个好的主键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42570585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com