只共享配置,不同步数据。
需求是这样的:因为需要做海外业务,所以数据需要分开存储,但希望是数据分开存储,但整体还是一个系统,所以希望可以共享一个配置,比如账号的 index 希望可以共享掉,比如说某个国家注册了账号消耗了 100021 这个账号 id ,那么另外一个国家注册账号它的 id 就是 100022 。
主从配置或者主主配置会同步数据,但不希望它同步数据,只同步一些配置,比如自增 id 的值这些。
1
opengps 2023-07-08 14:48:35 +08:00
既然是自增 id ,那么增长步长可以实现这个效果,比如设计为:国内偶数,国外奇数
|
2
huangzhiyia 2023-07-08 14:55:58 +08:00 via Android
用一个 Redis 来生成 ID ,写数据的时候去 Redis 取并 Redis ID+1 。
能动数据库设计的话,增加一个 UUID 字段来标识嘛。 |
3
cpstar 2023-07-08 15:43:08 +08:00
任何 mysql 自己的机制都是要保证两台机器的数据一致,既然 OP 的需要只是 ID 序列一致反而反对数据之一,那最佳实践就是脱离数据库去产生一个 ID ,或者 A 机生成了新 ID 之后,手工底层修改 B 机的 ID 的索引。于是 2# 说的 UUID 是最简单的,相互不干扰,也不需要引入第三方向两者提供统一的 ID 编号服务。
|
4
flyqie 2023-07-08 16:08:41 +08:00
能不能不止靠 mysql ,独立出来一个服务做 index 生成?
|
5
yushiro 2023-07-08 16:11:36 +08:00 via iPhone
分布式 id 生成算法,好像叫雪花 ID ?
核心原理是 id 里面有几位 bit 是预先设定的机器唯一 id |
6
mogg 2023-07-08 16:15:19 +08:00
这个需求本质和分库分表没啥区别,分配号段路由到指定机器好了
|
8
NXzCH8fP20468ML5 2023-07-08 16:58:07 +08:00 1
OP 似乎有什么误解,这共享 ID (状态)不就是共享数据么,怎么能说是共享配置。
|
10
zengguibo 2023-07-08 18:54:34 +08:00
如果只是单纯的 id ,可以提前生成,要的时候再统一去拿
|
11
harrozze 2023-07-08 23:08:58 +08:00
如果业务量不大的话,单独跑一个主库,里面只有用户表,包含 id 和少量最基本的基本信息。用在注册流程里去生成连续且只跟时间先后顺序有关,而跟国家无关的用户 ID 。然后各个国家的业务库里的用户表中,id 用这个过程里生成的,也就是说,单个国家的用户表里 id 是稀疏的,可能不连续的。
如果在不同的物理机器上,也还是免不了要搞个 API ,负责生成这样的全局统一 ID 。 |
12
dustynight 2023-07-09 02:49:14 +08:00 via Android
我们最近也碰到了原有的(类)自增 ID 需要改造适应多中心的情况,调研了一些方案,结合改造成本,最后选择了布进不同(就像上面有提到那样,a 中心+1 ,b 中心+2 ,c 中心+3 )
|