mysql - 离线同步(Performance UUID为主键)

标签 mysql ruby-on-rails synchronization offline uuid

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

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

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

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

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

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

谢谢

最佳答案

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

但是,简而言之 - 是的,较大的数据集会影响性能。 这样做的原因是主键索引需要 36 个字节,而整数需要 4 个字节(如果是 bigint,则为 8 个字节)。

我会提示您如何避免冲突:

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

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

关于mysql - 离线同步(Performance UUID为主键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6466459/

相关文章:

java - ResultSet Closed 错误后不允许执行操作 Netbeans MySQL 连接

mysql - 从表 B 中选择与表 A 匹配的所有值

ruby-on-rails - 帮助将 Rails 2 数据库逻辑转换为 Rails 3.1/PostgreSQL

ruby-on-rails - 缺少 Postgres 列

sql - 在 Rails 应用程序中集成 Oracle 数据库

C#按时间同步2个不同类型的列表

Java 使用的内存多于分配的内存

php - 无法使用 PHP 7 初始化 mbstring

mysql 插入自增 mul 键

java - 此代码是否需要嵌套锁?