Laravel 双向同步 2 个数据库

问题描述 投票:0回答:1

我正在构建一个托管在带有数据库的中央服务器上的应用程序。但是,我希望能够在第二台服务器上运行该应用程序,该服务器可能在线但可以离线运行。该服务器是一台笔记本电脑;您不会知道它是否可以连接到互联网。一旦计算机再次连接到互联网,就必须同步数据库(或者只要有连接就实时同步)。

我看过其他帖子,他们都谈到了单向同步,而我需要双向同步。

一种选择是跟踪更改、同步到中央服务器,并在有连接的情况下从那里下载更改。这可能会导致增量 ID 出现问题。我可以使用 UUID 来解决这个问题,但我们讨论的是许多包含许多行的表,这些表不一定都需要 UUID,所以这可能有点过头了。另外,我必须从头开始构建我的应用程序/数据库结构以支持 UUID,然后更改旧行以获得新的 UUID(考虑到关系的数量,这不是一件容易的任务)

还有自动同步数据库的工具。但是,我认为这些也会有同样的问题,并且在没有连接的情况下可能无法正常工作。

处理这种情况的最佳方法是什么?

mysql laravel database synchronization
1个回答
0
投票

看起来您必须创建手动同步过程。
无需跟踪更改,只要在覆盖任何现有记录之前检查字段

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
时间选择记录,该时间比上次完成同步的时间要高,以加快速度。

© www.soinside.com 2019 - 2024. All rights reserved.