离线同步(使用性能UUID作为主键)

3
我正在处理一个项目,其中一些客户存在互联网连接问题。
当互联网连接不可用时,我们将信息存储在位于客户端PC上的数据库中。当我们再次获得连接时,我们将本地数据库与中央数据库同步。
为避免两个数据库之间记录ID的冲突,我们将使用UUID [char(36)]而不是自动递增。
数据库使用Mysql并且采用InnoDB引擎。
我的问题是,这样做对selects、joins等性能有影响吗?我们是否应该使用varbinary(16)而不是char(36)来提高性能?
注意:我们已经有一个包含4Go数据的现有数据库。我们也乐意听取其他解决离线/在线问题的建议。
谢谢
1个回答

2

由于您没有说明使用的是哪个数据库引擎(MyISAM还是InnoDB),因此很难说性能影响的程度。

但是,简而言之 - 对于更大的数据集,将会有性能影响。 原因是您需要36字节的主键索引,而整数只需要4(如果是bigint则为8)字节。

我会给您一个提示,如何避免冲突:

首先是在数据库上具有不同的自动增量偏移量。如果您有2个数据库,则一个数据库的自动增量为奇数,另一个数据库的自动增量为偶数。

其次是具有复合主键。如果您将主键定义为PRIMARY KEY(id, server_id),则如果将数据复制到中央数据库中,就不会出现任何冲突。 您还将知道它来自哪里。 缺点是您需要向每个查询提供server_id。


数据库引擎正在使用InnoDB。 - Slim Tekaya
可以确定的是,数据库的性能随着时间的推移会下降。您正在使用更多的数据来存储某些内容。然而,这种影响的程度很难猜测。没有人能告诉您:“是的,如果您使用UUID(),性能将减少30%”,如果您决定将UUID()作为主键,您只能自己进行测试以测量其性能。 - Michael J.V.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接