我公司为每个客户的移动计算机提供的软件都有一个本地MySQL数据库。这些移动计算机通过移动宽带卡连接到互联网。我们将要读取的信息发送到字符串中,并通过范围从1kb到600kb的XML文件存储在客户的本地数据库中。 (注意:我们这样做是为了在互联网连接不可用时,客户仍然可以访问数据。)
1-600kb XML文件存储在我们服务器上每个用户的文件夹中,直到它们通过.net / C#webservice下载,该文件将文件提供给客户端,该客户端使用其令牌调用Web服务。第一次连接时,客户可能拥有最多20-40mb的这些小型XML文件。在正常的一天,他们可能会下载几个这样的文件。客户移动计算机上的软件每10秒钟通过Web服务检查服务器上文件夹中的文件。
每15分钟创建一个新的XML文件,需要对用户的数据库进行更改,如果没有进行任何更改,则不会创建XML文件。最大的XML文件(600kb)有1000条用户本地数据库的记录。每条记录有10多个列,有些列有10个以上的字符。
我们方法的问题:
这种方法很慢。 (可能需要1个半小时才能使空数据库同步。)
XML文件没有压缩,因此下载大小超出了必要的范围。
XML文件比它们需要的大,因为它们包含不必要的信息。
我们没有跟踪用户数据库中的内容,因此用户可能会失去同步。
它是基于文件的,这会导致硬盘上的大量读/写。
有人能建议更好的方法吗?
答案 0 :(得分:0)
对我来说听起来像是两个问题。
可以通过跟踪版本来完成将用户数据库更新到最新的主数据库。用户在调用时提交其版本号,并返回将其版本更新为最新版本所需的SQL。每次更新master数据库时,生成SQL以从每个可能的先前版本更新,然后只返回适当的SQL。我说SQL因为它似乎更有效,但你可以使用XML或JSON或其他任何东西,它仍然会更有效的版本。
尊重用户本地更改是一个更具挑战性的问题。您可以将用户更改保存为SQL或其他格式,并在更新后重新应用它们。但谁有最新/最好的信息是一个棘手的问题。通常,您需要比用户记录更大的粒度。一个系统可以更新部分信息 - 比如联系人的电话号码 - 而另一个系统更新另一个部分,比如他们的电子邮件。如果系统必须选择一个联系人条目或另一个联系人条目,您可以放松。要做到正确,您必须为每个字段添加时间戳记。如果远程设备始终处于联机状态,您可能会更好地尝试同步并要求用户在每次要进行更改时解决冲突。