在 DynamoDB 中保存一个新行,然后以最终读取一致性列出所有这些项目?
Saving a new row in DynamoDB and then listing all those items with eventual read consistency?
假设我们有一个 Web 前端和 API Gateway/Lambda/DynamoDB 后端。
用户导航到 "Add Project" 页面,他们在其中键入新项目的名称并单击“保存”,然后导航到项目列表(其中应包括他们刚添加的项目)。
因为 DynamoDB 中的读取在默认情况下是最终的,所以用户可能会单击保存,然后在下一页上看不到他们的新项目 - 这可能会造成混淆,如果他们输入大量信息有点恐慌。
让后端在 "getProjects" 调用中接受一个额外的参数来表示 "strongly consistent read" 是一个好的模式吗?或者有其他方法可以解决这个问题吗?
在插入或更新项目后执行一致读取实际上是一个很好的模式。在描述 CRUD operations
时,可以在 DynamoDB 文档中看到这方面的示例
我过去在处理 Web 应用程序时采用的一种常见模式是,通过重定向到 GET 来结束任何 POST/PUT 请求,在 GET 中我启用了强一致性。这在插入后立即为列表提供了强一致性。在大多数情况下,用户在插入后什么都不做,会导航到应用程序的不同部分,或者会单击以查看项目的详细信息。
假设用户单击列表中的项目以查看详细信息。从理论上讲,它可能还没有被传播(尽管它很可能会被传播,因为 DynamoDB 复制往往非常快)。我过去使用的另一种模式是针对详细信息页面,我发出最终请求,但如果我没有得到任何结果,我不会直接向最终用户 returning not found ,而是重试一次读取并保持一致。如果它 return 没有结果,那么我 return 没有找到,但如果它只是一个传播问题,那么你就可以走了。
假设我们有一个 Web 前端和 API Gateway/Lambda/DynamoDB 后端。
用户导航到 "Add Project" 页面,他们在其中键入新项目的名称并单击“保存”,然后导航到项目列表(其中应包括他们刚添加的项目)。
因为 DynamoDB 中的读取在默认情况下是最终的,所以用户可能会单击保存,然后在下一页上看不到他们的新项目 - 这可能会造成混淆,如果他们输入大量信息有点恐慌。
让后端在 "getProjects" 调用中接受一个额外的参数来表示 "strongly consistent read" 是一个好的模式吗?或者有其他方法可以解决这个问题吗?
在插入或更新项目后执行一致读取实际上是一个很好的模式。在描述 CRUD operations
时,可以在 DynamoDB 文档中看到这方面的示例我过去在处理 Web 应用程序时采用的一种常见模式是,通过重定向到 GET 来结束任何 POST/PUT 请求,在 GET 中我启用了强一致性。这在插入后立即为列表提供了强一致性。在大多数情况下,用户在插入后什么都不做,会导航到应用程序的不同部分,或者会单击以查看项目的详细信息。
假设用户单击列表中的项目以查看详细信息。从理论上讲,它可能还没有被传播(尽管它很可能会被传播,因为 DynamoDB 复制往往非常快)。我过去使用的另一种模式是针对详细信息页面,我发出最终请求,但如果我没有得到任何结果,我不会直接向最终用户 returning not found ,而是重试一次读取并保持一致。如果它 return 没有结果,那么我 return 没有找到,但如果它只是一个传播问题,那么你就可以走了。