amazon-web-services - 在 DynamoDB 中保存新行,然后列出所有具有最终读取一致性的项目?
问题描述
所以想象一下,我们有一个 Web 前端和 API Gateway/Lambda/DynamoDB 后端。
用户导航到“添加项目”页面,在其中键入新项目的名称并单击“保存”,然后导航到项目列表(其中应该包括他们刚刚添加的项目)。
因为 DynamoDB 中的读取默认是最终的,所以用户可能会单击保存,然后在下一页上看不到他们的新项目 - 这可能会导致混淆,如果他们输入了很多信息会有点恐慌。
让后端接受一个额外的参数来在“getProjects”调用中说“强烈一致的读取”是一个很好的模式吗?或者还有其他方法可以解决这个问题吗?
解决方案
在插入或更新项目后执行一致读取实际上是一种很好的模式。在描述CRUD 操作时,可以在 DynamoDB 文档中看到一个示例
我过去在使用 Web 应用程序时所做的一个常见模式是通过重定向到 GET 来结束任何 POST/PUT 请求,在该 GET 中我启用了强一致性。这在插入后立即为列表提供了强一致性。在大多数情况下,用户在插入后什么都不做,导航到应用程序的不同部分,或者单击查看项目的详细信息。
假设用户单击列表中的项目以查看详细信息。从理论上讲,它可能还没有传播(尽管很有可能会传播,因为 DynamoDB 复制往往非常快)。我过去使用的另一种模式是我发出最终请求的详细信息页面,但如果我没有得到任何结果,而不是直接将未找到的返回给最终用户,我会在读取后重试一致性。如果它没有返回任何结果,那么我会返回 not found,但如果这只是一个传播问题,那么你很高兴。
推荐阅读
- javascript - UWP VAPID 备用频道 401
- nativescript - 如何在 nativeScript 应用程序上获取用户位置
- c# - 在 VS 2017 中使用“使用 xamarin.forms 创建移动应用程序”电子书
- windows - 通过 cmd 中的命令删除目录,但在 bat 文件中不使用相同的命令
- arrays - 按文件从数组中复制元素
- webpack - 将样式标签注入到 html-webpack-plugin 从外部 sass 文件生成的 html 文件中
- jmeter - 使用 Apache JMeter 模拟 DoS 攻击
- xml - 使用 XSLT 解析 XML
- kotlin - 在 Kotlin 中将函数转换为 lambda 的更简单方法?
- go - 从 stdin 读取到 int 的字符串的类型转换给了我一个 0