【问题标题】:Database Sync Problem数据库同步问题
【发布时间】:2011-10-21 06:36:17
【问题描述】:

我公司在我们客户的每台移动计算机上安装的软件都有一个本地 MySQL 数据库。这些移动计算机通过移动宽带卡连接到互联网。我们将信息发送到一个字符串中,并通过 1kb 到 600kb 的 XML 文件存储在客户的本地数据库中。 (注意:我们这样做是为了在互联网连接不可用时客户仍然可以访问数据。)

1-600kb 的 XML 文件存储在我们服务器上每个用户的文件夹中,直到它们通过 .net/C# 网络服务下载,该网络服务将文件提供给客户端,客户端使用其令牌调用网络服务。客户第一次连接时可能拥有多达 20-40mb 的这些小 XML 文件。在正常情况下,他们可能会下载多达几 MB 的这些文件。客户移动计算机上的软件每 10 秒通过网络服务检查服务器上文件夹中的文件。

每 15 分钟创建一个新的 XML 文件,其中包含需要对用户数据库进行的更改,如果未进行任何更改,则不会创建 XML 文件。最大的 XML 文件 (600kb) 有 1000 条用户本地数据库的记录。每条记录有 10 多列,有些列有 10 多个字符。

我们方法的问题:

  • 这种方法很慢。 (同步一个空数据库可能需要 1 1/2 小时。)

  • 没有对 XML 文件进行压缩,因此下载大小超出了需要。

  • XML 文件比实际需要的大,因为它们包含不必要的信息。

  • 我们不会跟踪用户数据库中的内容,因此用户可能会变得不同步。

  • 它是基于文件的,这会导致硬盘上的大量读取/写入。

谁能提出一个更好的方法来做到这一点?

【问题讨论】:

    标签: database synchronization


    【解决方案1】:

    对我来说,这听起来像是两个问题。

    1. 可以通过跟踪版本来将用户数据库更新到最新的主数据库。用户在调用时提交他们的版本号,然后您返回将其版本更新到最新所需的 SQL。每次更新主数据库时,生成 SQL 以从每个可能的先前版本进行更新,然后返回适当的 SQL。我说 SQL 是因为它看起来更有效,但是您可以使用 XML 或 JSON 或其他任何东西,而且它仍然会更有效地使用版本。

    2. 尊重用户本地更改是一个更具挑战性的问题。您可以将用户更改保存为 SQL 或其他格式,并在更新后重新应用它们。但是谁拥有最新/最好的信息是一个难题。您通常需要比用户记录更大的粒度。一个系统可能会更新部分信息——比如联系人的电话号码——而另一个系统会更新另一部分,比如他们的电子邮件。如果系统必须选择一个联系人条目或另一个,无论哪种方式你都松了。为了使它正确,您必须为每个字段的更改加上时间戳。如果远程设备始终在线,您可能会更幸运地尝试同步并在用户每次想要进行更改时要求他们解决冲突。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-11
      • 1970-01-01
      • 2012-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      相关资源
      最近更新 更多