我可以在一个操作中同时更新SQL Server数据库表和DynamoDB表吗?

beq87vna  于 2022-11-21  发布在  SQL Server
关注(0)|答案(2)|浏览(155)

我们有一个面向用户的Web应用程序,由SQL Server支持,允许用户顶部更新我们的SQL Server中的表,也需要更新我们的dynamo数据库表中的文档记录。
如何确保两次提交都已发生?我们可以允许最多几秒钟的延迟。

brccelvz

brccelvz1#

简 而言 之 , 你 不能 。
Dynamo DB 不 像 大多 数 ( 所有 ? ) 关系 数据 库 那样 支持 两 阶段 ( 又 称 分布式 ) 提交 控制 。
较 长 的 答案 , 假设 一旦 DDB 返回 成功 的 ( 2xx ) 响应 , 记录 就 可以 持久 保存 , 您 可能 会 考虑

  • 启动 事务
  • 写入 SQL 表
  • 写入 DDB
  • 如果 DDB 返回 200 , 则 提交 SQL 事务
  • else : 回 滚 SQL Server 事务 。

另 一 个 想法 是 利用 DDB 流 。 让 你 的 应用 程序 只 写入 DDB , 让 另 一 个 应用 程序 ( Lambda ) 拾取 更改 并 写入 SQL Server 。
第 一 个 选项 " 更 简单 " , 但 不 太 健壮 。 无法 保证 在 向 DDB 发出 请求 和 应用 看到 响应 之间 不会 出现 错误 ( 应用 崩溃 ) 。 因此 , 在 更新 DDB 的 同时 回 滚 SQL 。
第 二 个 选择 是 更多 的 工作 , 基本 上 你 是 建立 ( 购买 ? ) 一 个 从 DDB 到 SQL 服务 器 的 数据 复制 引擎 。 但 由于 DDB 流 数据 的 生命 周期 为 24 小时 , 你 有 这么 长 的 时间 来 修复 SQL 服务 器 中 的 任何 问题 , 并 从 你 离开 的 地方 继续 。

bz4sfanl

bz4sfanl2#

为什么 不 直接 利用 SQL 事务 ( 因为 dynamo 事务 更 难 处理 ) ?

<begin trx>
save item in SQL db
save item in Dynamo DB
<commit trx>

中 的 每 一 个

  • 如果 在 SQL 中 保存 失败 , 则 将 回 滚
  • 如果 SQL 保存 成功 但 dynamo 保存 失败 , 则 会 出现 异常 并 回 滚
  • 如果 两者 都 成功 , 则 提交

我 是 不 是 漏 了 什么

相关问题