今日看到一则关于分布式数据库的设计讨论。主要纠结点在于分布式数据库的主键如何设计:
1,有人喜欢用int作为主键,但是这个方案被一部分人因为分布式需求而否决了
2,有人喜欢用uuid(),很显然uuid存在乱序插入的缺陷,虽然可用,但是大家都知道缺点
3,有人想用有序uuid,兼顾有序特点和分布式特点,看起来不错的方案。
4,还有人想用uuid_short,兼顾一下压缩索引空间大小
总的来说,我的建议是:根据实际情况,按需设计就好!
int 自增并不是不能用于支持分布式设计,而是需要预留自增跨度。比如第一节点从 1 自增,自增步长为 32 (这里就意味着预留了 32 个数据库扩容节点的空间)
uuid 是否需要有序,重点在于写入性能。采用有序是为了保证落盘顺序为“尾部追加”,这时候如果使用了时间戳列作为聚集索引,那么 id 列是否就不需要使用有序了(优缺点:浪费一个索引的空间损失,但是 id 规则会简化)。
uuid_short 相对于uuid会有所提升。我没有实际没用过,所以暂时可以推断一个结论:大致感觉就是省了一部分索引占用的硬盘空间,查询时候也省了一点内存,会有一定的提升。
原文地址:
https://www.opengps.cn/Blog/View.aspx?id=623
文章的更新编辑依此链接为准。欢迎关注源站原创文章!