1️⃣ DynamoDB 设计理念
核心原则
-
访问模式驱动(Access Pattern Driven Design)
-
DynamoDB 查询性能取决于表结构。
-
设计表之前,先明确应用的访问模式(用户需求)。
-
例子:
-
按用户获取订单 →
PK = USER#<userId>
,SK = ORDER#<orderId>
-
查询状态为"待发货"的订单 →
GSI1PK = STATUS#<status>
,GSI1SK = CREATED_AT
-
-
优点:查询高效,避免全表扫描。
-
-
单表设计(Single Table Design)
-
将不同类型数据存储在同一张表,通过 PK + SK 区分。
-
优点:减少 Join,减少 Scan,提高查询性能。
-
注意:需要规范 PK/SK 命名,便于 GSI 或 LSI 使用。
-
-
索引设计
-
GSI(Global Secondary Index):支持全局查询,适合不同 Partition Key 的访问模式。
-
LSI(Local Secondary Index):支持同一 Partition Key 下排序或额外查询条件。
-
优点:可以覆盖不同查询条件,不用 Scan。
-
注意:GSI 和 LSI 有吞吐量和存储成本,需按访问频率设计。
-
-
避免 Scan
-
Scan 全表遍历,返回大量无关数据,性能低。
-
Query + Key / GSI 可以直接定位数据。
-
Scan 可用于后台批处理或数据迁移。
-
-
分区与吞吐量
-
Partition Key 决定数据分区,高基数 Key 避免热点。
-
可选 On-demand 模式或固定 RCU/WCU。
-
优点:高可用、自动扩展,无需运维。
-
-
事务与一致性
-
DynamoDB 支持 ACID 事务(限制 25 条记录)。
-
注意高并发时事务成本高,应尽量按 Key 操作。
-
2️⃣ 前端缓存
核心概念
-
缓存是前端减少重复网络请求、提高渲染性能的重要手段。
-
主要工具:
-
Apollo Client
-
内存缓存,可持久化。
-
支持分页加载、乐观更新、虚拟列表结合。
-
-
Amplify DataStore
-
本地持久化缓存 + 离线支持。
-
自动同步到 AppSync / DynamoDB。
-
支持实时订阅和离线 CRUD。
-
-
优点
-
减少重复请求。
-
提升滚动列表和分页加载的性能。
-
支持离线场景(DataStore)。
3️⃣ 分页加载(Pagination)
核心概念
-
分页加载是处理大数据量列表的常用策略。
-
DynamoDB 使用
Limit + LastEvaluatedKey
实现分页。 -
前端每次只加载一页数据(可视区域或稍多一点)。
优点
-
减少单次查询量,提高响应速度。
-
前端渲染压力降低。
-
网络请求均匀分布,避免峰值延迟。
4️⃣ 虚拟列表(Virtualized List)
核心概念
-
前端只渲染可视区域的列表项,滚动时动态加载其他项。
-
常用库:
-
react-window
-
react-virtualized
-
优点
-
极大降低大列表渲染压力。
-
和分页加载结合,减少前端内存消耗。
-
用户滚动体验更流畅。
5️⃣ 批量写入(Batch Write)
核心概念
-
DynamoDB 支持批量写入 (
BatchWriteItem
) 每批最多 25 条记录。 -
前端可先缓存数据,再批量提交。
优点
-
减少网络请求次数。
-
避免高并发写入导致吞吐量限制(throttling)。
-
提高写入效率。
注意
-
写入批量过大需拆分。
-
配合 WCU 调整或 On-demand 模式。
6️⃣ 防抖滚动(Debounce / Throttle Scroll)
核心概念
-
滚动事件高频触发,直接发网络请求会造成性能瓶颈。
-
防抖(debounce):停止滚动一定时间后才触发。
-
节流(throttle):固定时间间隔触发一次。
优点
-
降低重复请求。
-
减少前端渲染压力。
-
和分页 + 虚拟列表结合,提升滚动体验。
7️⃣ 订阅优化(Subscriptions)
核心概念
-
AppSync 支持 GraphQL Subscriptions,实现前端实时更新。
-
高并发或高频数据更新可能导致 WebSocket 延迟。
优化策略
-
订阅过滤:
- 仅订阅必要 Partition Key / 类型。
-
批量更新前端:
- 高频变化字段做 debounce,减少 UI 更新次数。
-
配合 DAX / Response Cache:
- 热点数据缓存,提高读取速度。
✅ 总结概念篇核心思路
-
先设计访问模式再建表 → 高效查询。
-
前端只请求必须数据 → 缓存 + 分页 + 虚拟列表。
-
批量操作与防抖 → 降低高并发压力。
-
订阅优化 + 缓存 → 保证实时性同时性能可控。
-
工具组合:
-
Apollo / DataStore → 缓存与离线
-
Virtualized List → 大列表渲染
-
Batch Write → 高效写入
-
Debounce / Throttle → 滚动优化
-
DAX / Response Cache → 热点数据缓存
-