我的系统只需要从服务器获取更新。如何设计我的数据库?有审计表还是有其他设计机制?我的计划是从我的设备发送一个更新 ID,并检索新的更新。如何真正实现这一点?
3 回答
听起来您正在寻找SQL Server Replication。您可能需要查看技术网文章与移动用户交换数据,其中描述了两种常见模型,以及如何使用 SQL Server 来帮助您。
您可以选择自己使用审计表,但您仍然需要管理复制服务旨在帮助您解决的更新冲突问题。
正如您所提到的,将已更改的内容写入审计或更改表是一种方法。
如果您使用的是 SQLServer,那么还有一个时间戳列。它不是数据时间列 - 名称具有误导性。相反,它是一个递增的数字,当触摸一行时,它会获得下一个数字。如果您获得最大时间戳,然后再查询时间戳大于该长度的所有行,您将获得已更改/添加的行。
http://msdn.microsoft.com/en-us/library/ms182776(v=sql.90).aspx
SQL Server 时间戳数据类型与时间或日期无关。SQL Server 时间戳是指示数据库中数据修改的相对顺序的二进制数。时间戳数据类型最初是为了支持 SQL Server 恢复算法而实现的。
我特别要警惕的一种方法是使用日期时间作为水印。它会发生变化,可以改变并且不适合在算法中使用 - 特别是检测发生了什么变化。我已经看到系统在试图依赖日期时间作为可靠的水印方法时失败了。
几年前,我实现了这种设计。这是非常微不足道的,但它的工作。据我了解,您想像 Adobe 一样向您的客户推送更新。在数据库中保留一个表(它甚至不必是一个表,您可以在 XML 中保留条目)。当您的客户端应用程序加载时,检查服务器的版本,如果不匹配,则下载最新的更新,然后更新客户端版本,否则通常加载您的客户端应用程序