游戏合服 有一些表的主键是自增id,这部分表的合并有什么好的方案?
回复内容:
打算用一个php脚本完成合服功能,目前数据的备份、过滤以及玩家id的更新已经都完成,就是数据导入时,一些表的主键是自增id,目前没有想到特别好的方案。请各位高手给我一些建议,如何能兼容性很好的解决这个问题?
既然会合一次,就会合第二次,建议直接一次到位改成UUID,方便以后再合服
先写一个[表,id,服务器]=>[UUID]的转换,然后先把原来的表全都按照UUID重新写一遍,然后让生产环境原来写一份的改成写两份(旧表和UUID新表),然后慢慢把读切换到新表上,最后旧表上只有写没有读了就可以丢掉了。这时候就无论怎么合服都丝般顺滑毫无风险了
曾经帮助运帷大哥合服,遇到同样的问题。我们的解决方案是写了一个小程序 先SELECT出来,再INSERT进去。
A服的最大自增ID是100的话,就把B服的所有自增ID增加100。
没实践过,以前在哪看到过这种方案,目测是可行的,实际上的情况不太清楚。
仅供参考。。
最简单的方案是以大区id作为前缀。
或者是以物理服务器的id作为前缀,每个数据库的id肯定是不同的。
还有一种方案,是根据服务器建表,把不同服务器的玩家数据打散到不同的表中(虽然是在一个数据库里),虽然管理上比较麻烦,但是数据不会冲突
不使用自增型数字id作为主键了,直接使用uuid作为主键。不管你是合服还是做分布式,都是最简单的方式。