欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

游戏合服 有一些表的主键是自增id,这部分表的合并有什么好的方案?

程序员文章站 2024-01-12 20:48:46
...
打算用一个php脚本完成合服功能,目前数据的备份、过滤以及玩家id的更新已经都完成,就是数据导入时,一些表的主键是自增id,目前没有想到特别好的方案。请各位高手给我一些建议,如何能兼容性很好的解决这个问题?

回复内容:

打算用一个php脚本完成合服功能,目前数据的备份、过滤以及玩家id的更新已经都完成,就是数据导入时,一些表的主键是自增id,目前没有想到特别好的方案。请各位高手给我一些建议,如何能兼容性很好的解决这个问题?

既然会合一次,就会合第二次,建议直接一次到位改成UUID,方便以后再合服

先写一个[表,id,服务器]=>[UUID]的转换,然后先把原来的表全都按照UUID重新写一遍,然后让生产环境原来写一份的改成写两份(旧表和UUID新表),然后慢慢把读切换到新表上,最后旧表上只有写没有读了就可以丢掉了。这时候就无论怎么合服都丝般顺滑毫无风险了

曾经帮助运帷大哥合服,遇到同样的问题。我们的解决方案是写了一个小程序 先SELECT出来,再INSERT进去。

A服的最大自增ID是100的话,就把B服的所有自增ID增加100。

没实践过,以前在哪看到过这种方案,目测是可行的,实际上的情况不太清楚。

仅供参考。。

最简单的方案是以大区id作为前缀。
或者是以物理服务器的id作为前缀,每个数据库的id肯定是不同的。
还有一种方案,是根据服务器建表,把不同服务器的玩家数据打散到不同的表中(虽然是在一个数据库里),虽然管理上比较麻烦,但是数据不会冲突

不使用自增型数字id作为主键了,直接使用uuid作为主键。不管你是合服还是做分布式,都是最简单的方式。

相关标签: mysql php