有几个选项,几乎不是一个详尽的列表,而是更多的例子来开始你的思考;
要优化版本 1,您可以在服务器端创建一个触发器,用于更新已更改行上的版本字段。这样,如果客户端知道它的版本为 47,而服务器的版本为 52,那么您知道您只需要发送版本号介于 48 和 52 之间的行即可使客户端保持最新状态。如果更新主要是逐行进行,而不是“将所有绿色行更新为 puce”,这仍然会发送大量数据,则此方法效果最佳。
为了使版本 2 更安全一点,您可以发送除表名之外的所有 SQL,从而锁定对特定操作(例如 UPDATE/INSERT/DELETE,无 SELECT)和特定表(即不更新同一数据库中的其他表)。这可能有点难以维护,但如果数据库的大部分可能受到单个 UPDATE 的影响,则效果会更好。
将对数据库的操作分解为业务操作,然后将其发送。例如,业务操作可能是“已付款:用户 2,47 美元”,操作本身被发送到客户端,然后您将“已付款”映射到数据库中的更新。这将要求操作的数量相当小且已定义(尽管尝试定义它们很少是一个坏主意),但适用于逐行更新和全面更新,并且可能会使用最少的数据来获取内容同步(如果您对操作进行编号,以便在客户端尚未收到它们时只发送一次)它还免费为您提供审计日志,用户余额不仅发生了变化,您知道是什么导致了它的变化。
Personally I'd go for option 3 if I had a choice since I like to know what the database updates actually mean and when they were done, but for existing systems it may be way too much work.