我们有一个面向用户的Web应用程序,由SQL Server支持,允许用户顶部更新我们的SQL Server中的表,也需要更新我们的dynamo数据库表中的文档记录。如何确保两次提交都已发生?我们可以允许最多几秒钟的延迟。
brccelvz1#
简 而言 之 , 你 不能 。Dynamo DB 不 像 大多 数 ( 所有 ? ) 关系 数据 库 那样 支持 两 阶段 ( 又 称 分布式 ) 提交 控制 。较 长 的 答案 , 假设 一旦 DDB 返回 成功 的 ( 2xx ) 响应 , 记录 就 可以 持久 保存 , 您 可能 会 考虑
另 一 个 想法 是 利用 DDB 流 。 让 你 的 应用 程序 只 写入 DDB , 让 另 一 个 应用 程序 ( Lambda ) 拾取 更改 并 写入 SQL Server 。第 一 个 选项 " 更 简单 " , 但 不 太 健壮 。 无法 保证 在 向 DDB 发出 请求 和 应用 看到 响应 之间 不会 出现 错误 ( 应用 崩溃 ) 。 因此 , 在 更新 DDB 的 同时 回 滚 SQL 。第 二 个 选择 是 更多 的 工作 , 基本 上 你 是 建立 ( 购买 ? ) 一 个 从 DDB 到 SQL 服务 器 的 数据 复制 引擎 。 但 由于 DDB 流 数据 的 生命 周期 为 24 小时 , 你 有 这么 长 的 时间 来 修复 SQL 服务 器 中 的 任何 问题 , 并 从 你 离开 的 地方 继续 。
bz4sfanl2#
为什么 不 直接 利用 SQL 事务 ( 因为 dynamo 事务 更 难 处理 ) ?
<begin trx> save item in SQL db save item in Dynamo DB <commit trx>
中 的 每 一 个
我 是 不 是 漏 了 什么
2条答案
按热度按时间brccelvz1#
简 而言 之 , 你 不能 。
Dynamo DB 不 像 大多 数 ( 所有 ? ) 关系 数据 库 那样 支持 两 阶段 ( 又 称 分布式 ) 提交 控制 。
较 长 的 答案 , 假设 一旦 DDB 返回 成功 的 ( 2xx ) 响应 , 记录 就 可以 持久 保存 , 您 可能 会 考虑
另 一 个 想法 是 利用 DDB 流 。 让 你 的 应用 程序 只 写入 DDB , 让 另 一 个 应用 程序 ( Lambda ) 拾取 更改 并 写入 SQL Server 。
第 一 个 选项 " 更 简单 " , 但 不 太 健壮 。 无法 保证 在 向 DDB 发出 请求 和 应用 看到 响应 之间 不会 出现 错误 ( 应用 崩溃 ) 。 因此 , 在 更新 DDB 的 同时 回 滚 SQL 。
第 二 个 选择 是 更多 的 工作 , 基本 上 你 是 建立 ( 购买 ? ) 一 个 从 DDB 到 SQL 服务 器 的 数据 复制 引擎 。 但 由于 DDB 流 数据 的 生命 周期 为 24 小时 , 你 有 这么 长 的 时间 来 修复 SQL 服务 器 中 的 任何 问题 , 并 从 你 离开 的 地方 继续 。
bz4sfanl2#
为什么 不 直接 利用 SQL 事务 ( 因为 dynamo 事务 更 难 处理 ) ?
中 的 每 一 个
我 是 不 是 漏 了 什么