两个数据库之间的数据同步 - 确保应用程序的准确性

问题描述

我们正在构建一个基于 Windows 的自定义应用程序,该应用程序负责从我们每个客户内部部署数据库的关键表中提取数据,并将数据上传到我们的云数据库以在我们的 Web 应用程序中使用。

这实质上是每小时为每个用户“同步”本地数据集与我们的云数据集。这是一种单向同步 - 不会在云中进行任何更改。

源和目标都是不同类型的 sql 数据库。我们也对源的访问权限有限,以通过对某些存储过程的只读访问来提取我们需要的特定信息。这也是一个“多对一”场景,因为我们正在同步来自多个源数据库的数据,因此使用现有产品进行真正的“复制”似乎不是我们的选择。

不幸的是,数据集不包含所有记录的唯一标识符,因此为了处理更新,我们无法对记录进行比较。我们当前的流程是删除并重新导入最近 7 天的记录,以确保我们的数据是最新的。 (我们不关心数据更改 > 7 天)。我们先删除现有记录,然后重新上传数据 - 这个过程最多需要 5 分钟。

根据我们的 Web 应用程序的用户加载特定页面的时间,他们可能会看到任何/部分/所有数据,具体取决于此删除/重新导入过程的状态。

我们想知道如何改进这一点 - 并提出了一些想法:

  • 拥有“主动”和“被动”数据集。我们的 Web 应用程序将使用“主动”数据集,而同步过程会添加最新数据的第二个“被动”副本。同步完成后,我们执行交换并使“被动”副本成为“主动”副本。这应该会将我们关注的“5 分钟”窗口大大减少到几秒钟。

  • 用户显示同步正在进行通知,他们需要稍后检查(这不是最佳选择,因为同步过程可能需要长达 5 分钟 - 因此这会导致用户体验不佳)。

假设我们无法将唯一标识符添加到源内部部署数据库中的所有记录中 - 关于我们如何处理此问题,是否有任何其他建议可以为我们的用户提供良好的体验?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...