暂存与提交

DynoTable 中的每一次编辑在触及 DynamoDB 之前都会经过一个暂存区。可以把它想象成带有安全闩的 git 暂存区:编辑、创建和删除会作为可审阅的 diff 累积起来,然后仅在你提交时才以的形式发出。

在你下令之前,任何内容都不会写入你的表。

工作原理

张表都有自己的暂存区,在该表的每个视图之间共享。当你保存一次条目编辑、创建一行或删除一行时,该更改会作为逐属性的 diff 落入面板 —— 新增、移除和更改的属性并排显示。网格中受影响的行会按操作着色:

  • 绿色 —— 一个新条目(创建)
  • 橙色 —— 一次更新(更改的单元格被高亮)
  • 红色 —— 一次删除(带删除线)

在两个标签页中打开同一张表,它们会显示相同的待处理更改;关闭再重新打开某个标签页,暂存内容仍然在那里。关闭一个标签页绝不会丢弃你已暂存的更改。

⌘⇧D 切换面板。拖动它的边缘可调整大小。

暂存面板将待处理的更改显示为逐属性的 diff 卡片,支持按行和批量提交。
暂存面板将待处理的更改显示为逐属性的 diff 卡片,支持按行和批量提交。

审阅更改

每张 diff 卡片都精确显示将要更改的内容:

  • 标量以旧 → 新的形式呈现,带红/绿高亮。
  • 长字符串显示内联的逐词 diff。
  • Map 和 List 呈现为美化打印的 JSON(v1 中按整个属性处理)。

使用卡片的逐属性拒绝可将单个属性回退到其原始值。拒绝每一个属性,整个更改就会被丢弃。

提交

提交即可把你已暂存的更改写入 DynamoDB:

  • 提交 N 会发出该表的每一项已暂存更改 —— 横跨它的所有标签页。
  • 仅提交此项会从某张卡片发出单个更改。

提交以带乐观锁条件的 TransactWriteItems 批次发出:一次更新只有在属性仍保持你开始时的值时才会成功,一次创建只有在条目尚不存在时才会成功,一次删除只有在条目仍然存在时才会成功。较大的暂存会自动分块,以保持在 DynamoDB 的事务限制之内。

编辑器中的保存快捷键在这里同样适用:

  • ⌘S —— 暂存(不提交)
  • ⌘⇧S —— 保存并提交
  • ⌘⇧X —— 丢弃所有已暂存的更改(需确认)

从网格选区你可以暂存删除而无需打开编辑器:

  • ⌘⌫ —— 暂存对选中行的删除
  • ⌘⇧⌫ —— 删除并提交选中行

冲突

由于提交使用乐观锁,在你暂存之后被他人提交的更改会被检测出来,而不是被悄悄覆盖。卡片会显示一个内联横幅:

  • 漂移 —— 远端条目在你之下发生了变化。rebase 到远端会刷新基线以便你重新审阅,或者中止该更改。
  • 远端已删除 —— 该条目不再存在。中止该更改。
  • 网络不可用 —— 提交无法到达 DynamoDB。重试或中止。

一次提交会在第一个失败的批次处停止 —— 较早成功的批次保持已写入,其余的不会被尝试,失败会以待解决的冲突形式呈现。

哪些情况会阻止提交

某些状态是只读的,可以暂存但不能提交 —— 最典型的是过期或只读的许可证。暂存仍然有效;一旦应用回到激活状态,提交就会再次解锁。

更新于