域名 AXUM.RS 将于 2025 年 10 月到期。我们无意再对其进行续费,如果你有意接续这个域名,请与我们取得联系。
  • AXUM.RS 现仅需人民币 3000 元(大写:叁仟元整。接受适度议价
  • 按照行业规则,AXUM.RS 到期后,大概率会进入长时间的赎回期,该期间内,如果你想拥有该域名,将要付出高额的费用
  • 我们已启用 AXUM.EU.ORG 域名,并将持续运营
  • 仅接受微信或支付宝交易
如果你对 AXUM.RS 有兴趣,请和我们进行联系:

前置知识:分布式ID

由于改用 PostgreSQL 数据库,本章内容仅作知识扩展。项目使用的相关知识请阅读《前置知识:使用 XID 作为分布式ID》。

为什么需要分布式ID

有哪些分布式ID的实现

常用的有:

UUID

Redis 分配

雪花算法

xid

以及其它

你可以参考这篇文章

你可以参考这篇文章

为什么选用雪花算法

我们的商城专题将选用雪花算法,主要是由 MySQL 特性决定的。其实一开始选定的是 xid:

  • 专题构想之初,计划使用的 PostgreSQL 数据库,它已经提供了 xid 数据类型。即使不使用 xid 数据类型而使用 CHAR 类型,PostgreSQL 也不存在 MySQL 的问题

  • MySQL 的 InnoDB 引擎,使用的是 “索引即数据”,并且使用的是B+树索引,它的最大特点是:

    • 整数类型的索引效率远高于字符串
    • 具有排序的、递增数据的索引最为高效
  • UUID:它是无序的字符串。对于 MySQL 来说,索引效率非常低下

  • xid:它是有序的且递增的,但很遗憾,它也是字符串。对于 MySQL 来说,索引效率中等

  • 雪花算法:它是有序递增的长整型,对 MySQL 索引最友好

专题构想之初,计划使用的 PostgreSQL 数据库,它已经提供了 xid 数据类型。即使不使用 xid 数据类型而使用 CHAR 类型,PostgreSQL 也不存在 MySQL 的问题

MySQL 的 InnoDB 引擎,使用的是 “索引即数据”,并且使用的是B+树索引,它的最大特点是:

  • 整数类型的索引效率远高于字符串
  • 具有排序的、递增数据的索引最为高效

UUID:它是无序的字符串。对于 MySQL 来说,索引效率非常低下

xid:它是有序的且递增的,但很遗憾,它也是字符串。对于 MySQL 来说,索引效率中等

rust 的雪花算法

使用 rs-snowflake 即可方便地在 rust 使用雪花算法来生成分布式ID,它的依赖如下:

[dependencies]
rs-snowflake="0.6"

使用起来也非常方便,只需要传入机器ID和节点ID即可:

use snowflake::SnowflakeIdGenerator;
fn main() {
   let mut id_generator_generator = SnowflakeIdGenerator::new(1, 1);
   let id = id_generator_generator.real_time_generate();
}
要查看完整内容,请先登录