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