我正在构建一个托管在带有数据库的中央服务器上的应用程序。但是,我希望能够在第二台服务器上运行该应用程序,该服务器可能在线但可以离线运行。该服务器是一台笔记本电脑;您不会知道它是否可以连接到互联网。一旦计算机再次连接到互联网,就必须同步数据库(或者只要有连接就实时同步)。
我看过其他帖子,他们都谈到了单向同步,而我需要双向同步。
一种选择是跟踪更改、同步到中央服务器,并在有连接的情况下从那里下载更改。这可能会导致增量 ID 出现问题。我可以使用 UUID 来解决这个问题,但我们讨论的是许多包含许多行的表,这些表不一定都需要 UUID,所以这可能有点过头了。另外,我必须从头开始构建我的应用程序/数据库结构以支持 UUID,然后更改旧行以获得新的 UUID(考虑到关系的数量,这不是一件容易的任务)
还有自动同步数据库的工具。但是,我认为这些也会有同样的问题,并且在没有连接的情况下可能无法正常工作。
处理这种情况的最佳方法是什么?
看起来您必须创建手动同步过程。
无需跟踪更改,只要在覆盖任何现有记录之前检查字段
created_at
和 updated_at
即可,从而确保仅使用较新的数据进行覆盖。
伪代码:
for table in database_server_A:
records = select * from table
for record in records:
if not exists(record) in database_server_B:
insert_into_database_server_B(record)
continue
server_b_record = select_from_database_server_b(record)
if record.updated_at > server_b_record.updated_at:
update_database_server_b(record)
elif record.created_at > server_b_record.created_at:
update_database_server_b(record)
通过反转服务器 A 和服务器 B 重复相同的操作,就完成了。 这可能会影响性能,您当然可以改进该代码,仅在
created_at
时间选择记录,该时间比上次完成同步的时间要高,以加快速度。