database - 使用 Amazon RDS 只读副本时是否可能获得不一致的数据?
问题描述
想象以下场景:
- 您正在使用 Web 应用程序来修改您的个人资料数据(假设您将您的姓名从A更改为B)。
- 数据存储在 Amazon RDS 中。您将数据库配置为使用额外的只读副本。
- 提交数据更新 ( B ) 后,您会立即刷新页面。
- 您会看到从 Amazon RDS 中读取的旧数据 ( A )(从尚未同步的只读副本中提取)。
上面描述的场景是否可能得到?可能性有多大?
我知道 Amazon RDS 只读副本不能保证严格的写后读一致性,但那样您可能会有非常糟糕的用户体验。你应该如何设计你的应用程序来应对这些问题?
解决方案
可以使用陈旧数据命中(查询)只读副本。尽管如此,您描述的方式不太可能。复制通常需要不到一秒钟。刷新页面需要一点:)
复制速度取决于负载(主要是只读副本)。
为了避免在您的情况下出现奇怪的行为:
- 如果您确实需要在写入后进行一致的读取,只需从 master 读取!但我在您描述的用例中没有看到这一点。如果你想证明的话,试着监控它。
- 不要给只读副本增加额外的负载(如报告或分析查询)。这可能会减慢复制速度。
- 您可以使用 Amazon Aurora 为(读取)副本获得更好的同步。
还有更多方法可以使事情复杂化并使其“更好”。但通常情况下,您会在大型系统中考虑这些,写入/更新负载很重。
推荐阅读
- python - 如何避免将字典数据保存到文本文件中,从而导致在保存的文本文件中创建多个字典
- node.js - 使将 Cast 提供给 Array 的发布请求因价值而失败
- python - 如何从第二个输入中打印第一个输入的设定次数,该输入也基于赔率或偶数倍增
- django - 在每个用户的模型视图集中过滤结果的最佳方法是什么?
- python-poetry - 在 CI 构建中使用缓存的 venv 时出现诗歌“FileNotFoundError”
- php - 允许用户创建具有安全受限访问权限的刀片文件
- angular - 尽管 formControl 对象中有一个“value”键,但 formControl.value 返回 null
- assembly - 获取 CMake 生成的构建以识别我的程序集宏
- c# - 计算图片调整大小与可用空间的比较
- php - Laravel 8:保存记录时对未定义方法 DateTime::set() 的错误调用