MySQL 有办法做到多个物理分隔的数据库系统共享一个配置吗

2023-07-08 14:30:16 +08:00
 nnegier

只共享配置,不同步数据。

需求是这样的:因为需要做海外业务,所以数据需要分开存储,但希望是数据分开存储,但整体还是一个系统,所以希望可以共享一个配置,比如账号的 index 希望可以共享掉,比如说某个国家注册了账号消耗了 100021 这个账号 id ,那么另外一个国家注册账号它的 id 就是 100022 。

主从配置或者主主配置会同步数据,但不希望它同步数据,只同步一些配置,比如自增 id 的值这些。

1563 次点击
所在节点    程序员
12 条回复
opengps
2023-07-08 14:48:35 +08:00
既然是自增 id ,那么增长步长可以实现这个效果,比如设计为:国内偶数,国外奇数
huangzhiyia
2023-07-08 14:55:58 +08:00
用一个 Redis 来生成 ID ,写数据的时候去 Redis 取并 Redis ID+1 。

能动数据库设计的话,增加一个 UUID 字段来标识嘛。
cpstar
2023-07-08 15:43:08 +08:00
任何 mysql 自己的机制都是要保证两台机器的数据一致,既然 OP 的需要只是 ID 序列一致反而反对数据之一,那最佳实践就是脱离数据库去产生一个 ID ,或者 A 机生成了新 ID 之后,手工底层修改 B 机的 ID 的索引。于是 2# 说的 UUID 是最简单的,相互不干扰,也不需要引入第三方向两者提供统一的 ID 编号服务。
flyqie
2023-07-08 16:08:41 +08:00
能不能不止靠 mysql ,独立出来一个服务做 index 生成?
yushiro
2023-07-08 16:11:36 +08:00
分布式 id 生成算法,好像叫雪花 ID ?
核心原理是 id 里面有几位 bit 是预先设定的机器唯一 id
mogg
2023-07-08 16:15:19 +08:00
这个需求本质和分库分表没啥区别,分配号段路由到指定机器好了
flyqie
2023-07-08 16:27:53 +08:00
@yushiro #5

雪花 id 不符合楼主需求,楼主希望能做到的是连续 ID ,雪花似乎做不到完全连续的 id 。。
NXzCH8fP20468ML5
2023-07-08 16:58:07 +08:00
OP 似乎有什么误解,这共享 ID (状态)不就是共享数据么,怎么能说是共享配置。
xuanbg
2023-07-08 18:18:18 +08:00
@flyqie 连不连续的有什么关系呢?单调递增就够了。
zengguibo
2023-07-08 18:54:34 +08:00
如果只是单纯的 id ,可以提前生成,要的时候再统一去拿
harrozze
2023-07-08 23:08:58 +08:00
如果业务量不大的话,单独跑一个主库,里面只有用户表,包含 id 和少量最基本的基本信息。用在注册流程里去生成连续且只跟时间先后顺序有关,而跟国家无关的用户 ID 。然后各个国家的业务库里的用户表中,id 用这个过程里生成的,也就是说,单个国家的用户表里 id 是稀疏的,可能不连续的。

如果在不同的物理机器上,也还是免不了要搞个 API ,负责生成这样的全局统一 ID 。
dustynight
2023-07-09 02:49:14 +08:00
我们最近也碰到了原有的(类)自增 ID 需要改造适应多中心的情况,调研了一些方案,结合改造成本,最后选择了布进不同(就像上面有提到那样,a 中心+1 ,b 中心+2 ,c 中心+3 )

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/955102

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX