脱机同步(将性能UUID作为主键)

时间:2011-06-24 10:20:44

标签: mysql ruby-on-rails synchronization offline uuid

我正在开展一个项目,其中一些客户有互联网连接问题。

当互联网连接不起作用时,我们将信息存储在客户端PC中的数据库中。 当我们再次获得连接时,我们将本地数据库与中央数据库进行同步。

为了避免两个数据库之间的记录ID冲突,我们将使用UUID [char(36)]而不是自动增量。

数据库是带有InnoDB引擎的Mysql。

我的问题是这会对选择,加入等的性能产生影响吗? 我们应该使用varbinary(16)而不是char(36)来提高性能吗?

注意:我们已经有一个包含4个Go数据的现有数据库 我们也欢迎其他建议来解决此离线/在线问题。

由于

1 个答案:

答案 0 :(得分:2)

由于您没有说明正在使用哪个数据库引擎(MyISAM或InnoDB),因此很难说出性能影响的大小。

然而,要简短地讲述这个故事 - 是的,对更大的数据集会有性能影响。 原因是你需要36个字节用于主键索引,而4个(8个bigint)字节用于整数。

我会告诉你如何避免冲突:

首先是在数据库上有不同的自动增量偏移量。如果你有2个数据库,你的自动增量在一个数据库上是奇数,甚至在另一个数据库上也是奇数。

第二是拥有复合主键。如果将主键定义为PRIMARY KEY(id, server_id),那么如果将数据复制到中央数据库中,则不会发生任何冲突。 你也会知道它来自哪里。 缺点是您需要为每个查询提供server_id。