我和我的同事创建了一些客户端服务器架构程序,它们使用增量来同步客户端与服务器。与删除记录有关的问题似乎出现在多个项目中。服务器如何在本地删除记录并且仍然有足够的信息为将来的客户端生成删除增量信息?
示例 1:
实时游戏使用 UDP 客户端-服务器在游戏之间同步实体。仅传输包含修改后的游戏状态和先前丢弃的数据包数据的增量。如果服务器删除一个实体,它可以发送一个删除增量告诉每个客户端删除该对象。除非丢弃数据包,否则此方法有效。这对于正常状态数据是可以的,因为服务器可以识别哪些数据被删除并从中重新传输增量,但这意味着服务器无法在本地删除服务器实体(没有从每个客户端进行完全确认),因为没有将存在数据以从中生成删除增量。
示例 2:
客户端想要与存储在服务器上的数据库同步。服务器在服务器上存储每条记录的修改日期。当客户端请求同步时,它会传输它更新的最后日期。服务器收集自该日期以来已修改的所有记录并将它们发送到客户端。仅当服务器保留已删除的每条记录并使用标志指示删除时,这才适用于删除。服务器无法安全地删除本地存储的记录。
在这两个示例中,我能想到的唯一解决方案是保留某种包含曾经删除的所有内容的记录,或者在某个日期/时间之后强制进行整个同步。这些看起来不像是可持续的或优雅的模型。解决此类问题的可持续方法有哪些?