0

我在移动数据库上有一个本地数据库。每隔几分钟,设备就会查看其表并通过 REST 接口将任何未标记为已上传的数据发送到服务器。这是一个示例表:

id | name | phone | uploaded
1 | "bob" | "444" | 0

通过 REST 接口发送的内容是:

name : "bob", phone : "444" 

服务器将响应:

status : "OK"

移动设备收到此“OK”消息后,会将这些记录标记为uploaded=1。这应该可以正常工作,以使设备与实际发生的情况保持一致。问题是服务器可能会从移动设备接收到其中两条消息(无论出于何种原因),并将两条具有完全相同数据的记录插入服务器数据库。

有什么方法可以阻止这种情况发生?

我想到了服务器数据库中所有字段的唯一性索引,但我觉得必须有更好的方法。

4

1 回答 1

0

您可以在服务器端或客户端处理此问题。

正如您已经注意到的那样,您可以避免服务器组件上的重复记录,只需在您的数据库表上添加一个 UNIQUE 约束,可能是您的 ID 列。这样,每次您尝试在 DBMS 上存储重复消息时,数据库都会抱怨。

在客户端,您只需在移动数据库表中添加一个 STATE 列:该列应该只支持三个值:UPLOAD_PENDING、UPLOAD_IN_TRANSIT 和 UPLOAD_FINISHED。此列旨在替换您的 UPLOADED 字段,并且应该在创建元组 (UPLOAD_PENDING)、您已经开始上传 (UPLOAD_IN_TRANSIT) 并且上传完成 (UPLOAD_FINISHED) 时更新。您应该在开始新的上传之前检查状态字段值以避免重复消息问题。

您可以选择其中任何一种方法,但我强烈建议您同时使用这两种方法。

于 2012-06-08T13:39:57.077 回答