HackerTube ?

AWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401)

Amazon Web Services在 YouTube 播放 ↗

字幕解读

Houlihan 说明 NoSQL 适合访问模式明确、可预期且规模较大的 OLTP 服务;关系仍然存在,但需把数据按查询需求反规范化到单表、复合键和二级索引中,以减少联接和往返。设计前要列全访问模式、数据生命周期与事务边界,并通过高基数分区键避免热点。演讲以配置、配送和电子书同步服务示范单表设计、版本记录、事务 API、流处理及按需弹性扩缩。

自动字幕 · 引文按字幕原文展示,可点时间戳回看片段。

内容要点

  • NoSQL 模型必须从应用访问模式出发:分区键分散负载,排序键与复合键表达层级及范围查询。
  • 把相关实体复制到同一表并使用二级索引,可以用一次查询满足多种关系访问;数据越贴合访问模式,模型也越紧耦合。
  • 事务应服务于真实的跨项原子更新或版本提交,而不应用来维持关系数据库式规范化模型;流和预计算可把聚合计算移出请求路径。
视频章节 6
  1. 数据处理演进与 NoSQL 动因
  2. 分区键、排序键和查询方式
  3. 从访问模式设计模型
  4. 流处理与预计算聚合
  5. 复合键构造层级访问
  6. 用单表模型支持复杂关系
具体观点与证据 4

NoSQL建模先要列明访问模式;已知、重复的业务查询比临时分析查询更适合此路径。

讲者针对DynamoDB式建模;保留关系数据库用于OLAP和临时查询。

I need to know exactly what the application is doing
探索此观点 →

针对访问模式优化的数据模型会与服务耦合,效率提高不等于模型更灵活。

反对把无固定表结构误解成任何查询变化都便宜。

the more that I tune that data to the access pattern the more tightly coupled to that service I am
探索此观点 →

过滤表达式在读取后剔除结果,不能减少已经读取项目的成本。

演讲对比sort key条件和filter condition;可用状态加日期组合排序键改善选择性。

the filter condition applies after the read so
探索此观点 →

预计算并保存聚合值,可以避免每次读取都重新执行同一聚合。

演讲以加载后不变的时序数据说明,变化数据需维护更新逻辑。

the metric is calculated now it can be read a million times
探索此观点 →
补充字幕原文 2

NoSQL 模型需要预先了解全部访问模式,以便围绕查询需求设计数据布局。

understand every access pattern I need to know

单表与索引设计的目标之一,是通过单次查询返回满足应用工作流的多个相关实体。

we want single queries to deliver multiple entities
解读边界

内容是 AWS DynamoDB 的实践推介,性能、成本和服务能力的主张主要基于演讲者的客户经验;具体实现受该产品模型和当时功能约束。

相关视频与证据 2

数据模型原则到实现问题查询模型之外,还要决定是否保留事实的时间

DynamoDB 讲解要求先枚举访问模式,再按查询组织单表、索引和事务;Hickey 则强调事实包含时间,新事实不应让过去的事实变成错误或消失。连接这两点可以把存储设计从“怎样高效读当前实体”推进到“是否需要表达历史事实”,提示读者将时间与访问模式一并纳入建模。

当前视频

AWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401)

DynamoDB 表结构应围绕应用必须支持的访问模式设计。

understand every access pattern I need to know
关联视频

The Value of Values with Rich Hickey ↗

事实带有时间,新事实可以更新当前视图,但不应抹去旧事实的真实性。

no they don't because facts incorporate time how is
▶ 20:30–20:41 · 观看片段

适用边界 DynamoDB 演讲中的版本控制例子并不等同于完整的事件溯源或历史事实模型;Hickey 的主张是信息建模原则,不是具体数据库实现指南。

数据访问设计对照从访问模式出发,再选择数据项的协调方式

DynamoDB 讲解要求事先了解访问模式并围绕查询设计数据布局;WhatsApp 的讲解展示了另一项访问设计选择:同一记录的操作被路由到单一进程。两者可作为互补问题来读——先确定需要如何访问数据,再决定如何组织数据和协调对同一记录的并发访问。

关联视频

Erlang Factory 2014 - That's 'Billion' with a 'B': Scaling to the Next Level at WhatsApp ↗

同一记录的访问路由到单一进程,以控制竞争和一致性。

access on a single record is going through a single process
▶ 14:38–14:43 · 观看片段
当前视频

AWS re:Invent 2018: Amazon DynamoDB Deep Dive: Advanced Design Patterns for DynamoDB (DAT401)

需要先列出应用访问模式,再围绕这些模式设计数据模型。

understand every access pattern I need to know

适用边界 前者讨论 DynamoDB 的表与索引建模,后者讨论 Erlang/Mnesia 系统中的进程路由;不能把单进程访问当作 DynamoDB 的设计建议。

Hacker News 评论

查看 HN 原评论 ↗