从不同的 REST 端点更新数据存储实体



让我们假设我有一个具有以下属性和初始值的实体 Employee:

Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "INITIATED"}

请注意,我不能使用按实体键查询来获得强大的一致结果,因为在这种情况下,我们没有实体键。

在应用引擎后端,我们集成了Firebase,以便向员工发送通知。 当通知到达员工的 Android 手机上时,我们的 Android 应用程序使用 Android 后台服务命中 REST 端点 1,以将状态从"已启动"更新为"已交付"。 当员工点击通知时,我们的安卓应用程序会打开安卓摄像头并捕获员工的正面,并使用 REST 端点 2 将压缩图像发送到服务器。还有另一个端点3,它使用Android后台服务保存相同捕获的面部图像的高质量。

REST 端点 1 :

1-使用过滤器(员工ID)和过滤器(请求ID)加载实体 2-将状态更新为已交付 3-保存实体 4-将成功结果发送到安卓客户端。

终结点 1 中的更新实体应如下所示:

Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "DELIVERED"}

REST 端点2:1 - 使用过滤器(员工 ID)和过滤器(请求 ID)加载实体 2-将捕获的人脸存储到云存储并保存下载URL。 3-将状态更新为"已完成" 4-保存实体 5-将成功结果发送到安卓客户端

来自终结点 2 的更新实体应如下所示:

Employee{Name : "Baqir", employeeID: "1234", profilePic: " cloud storage download URL",requestID: "123456" , status : "COMPLETED"}

REST 端点 3:1-使用过滤器(员工 ID) 和过滤器(请求 ID)加载实体 2-将捕获的面部高质量图像存储到云存储并保存下载URL。 4-保存实体 5-将成功结果发送到安卓客户端

来自终结点 3 的更新实体应如下所示:

Employee{Name : "Baqir", employeeID: "1234", profilePic: " cloud storage download URL",  HQprofilePic: " cloud storage download URL", requestID: "123456" , status : "COMPLETED"}

问题:Android 客户端始终先执行端点 1,然后执行端点 2,然后执行端点 3,并从所有端点接收成功结果。 但有时数据存储中最终更新的实体是由端点 1 更新的实体。

执行端点 1、2、3 后,数据存储中的最终实体为:

Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , status : "DELIVERED"} 

在某些情况下,最终实体是端点 1 和端点 3 的结果。

Employee{Name : "Baqir", employeeID: "1234", requestID: "123456" , HQprofilePic: " cloud storage download URL", status : "DELIVERED"} 

您可以在所有端点中将load the entity using filter(employeeID) and filter(requestID)(最终一致)替换为:

使用筛选器(员工 ID)
  1. 和筛选器(请求 ID)通过keys_only查询获取实体密钥
  2. 按键查找加载实体(始终一致)

您只需要注意使用相应的 employeeID 和 requestID 初始创建实体与它在步骤 1 中变得可见(即更新该查询的索引时)之间的延迟 - 在此之前,您将无法获取实体键。

最新更新