各位数据库专家好, 我目前在开发一个系统,其中有一个特殊的数据同步场景需要寻求建议。 系统架构如下:
1 个中央主数据库( PostgreSQL ) N 台笔记本电脑,每台都安装了本地 PostgreSQL 数据库 笔记本电脑可能会离线工作,每天都会产生新记录 笔记本需要定期与主数据库进行双向同步
我现在面临一个主键设计的选择问题:是使用 UUID 作为主键,还是继续使用自增 ID ? 我的初步想法是使用 UUID 可能更合适,因为:
每台笔记本可以独立生成全局唯一 ID ,不会与其他设备产生冲突 同步时不需要处理主键冲突问题 不需要复杂的主键映射或转换机制
而如果使用自增 ID ,我担心会遇到以下问题:
每台笔记本生成的自增 ID 会重复 同步时需要解决 ID 冲突 可能需要额外的 ID 映射表
请问各位有没有处理过类似的分布式数据库同步场景? UUID 是否确实是更好的选择?或者有其他更优方案?在性能、存储空间和同步复杂度之间,如何做出权衡? 感谢分享您的经验和建议!
1
concernedz 5 天前
我记得可以生成顺序的 uuid 吧
|
![]() |
2
dbskcnc 5 天前
uuidv7 不折腾
|
![]() |
3
laikick 5 天前
雪花不是更好吗?
|
![]() |
4
viking602 5 天前
uuid 或者 snowid
|
5
fffq 5 天前
各笔记本是全量同步?
|
![]() |
6
viking602 5 天前
@viking602 具体算法可以看这个 https://github.com/yitter/IdGenerator
|
7
mark2025 5 天前
新的 uuidv7
|
8
sardina 5 天前
uuid v7 是基于时间戳顺序的,再加个 byte 标记设备 id ,这样就不会重复了
|
9
conn457567 5 天前 via Android
mongfb 的 objectID ,hutool 里面有一个实现也非常不错
|
10
NoKey 5 天前
看一下设备量,去看看雪花算法,可以考虑考虑
|
11
ho121 5 天前 via Android
数据量不大的话,自增主键也不是不可以,每个数据库主键范围不重叠就行
|
![]() |
12
shiny 5 天前
uuidv7 ,冲突概率极低
|
![]() |
13
mightybruce 5 天前
用笔记本电脑来做 postgresql 的存储 真是有脑洞的想法
|
![]() |
14
SGL 5 天前
@mightybruce 这个场景听上去很封闭很涉密的样子
|
![]() |
15
yangg 4 天前
pg 果断 ulid 真香 https://github.com/pksunkara/pgx_ulid
|
![]() |
16
bxb100 4 天前
为啥不用 crdt
|
![]() |
17
gainsurier 4 天前 via iPhone
我怎么在 d 版也刷到了哈哈
|