|
@@ -0,0 +1,56 @@
|
|
|
|
+# 3 Creating Elaborate DynamoDB tables
|
|
|
|
+
|
|
|
|
+## 3.1 Storage consistency
|
|
|
|
+
|
|
|
|
+DDB manages capacity
|
|
|
|
+
|
|
|
|
+- 1 WCU (Write Capacity Unit) = 1 write of <=1 kB op per second
|
|
|
|
+ - write sizes are rounded up to 1kB: 1 w/sec of 500B counts as 1 WCU
|
|
|
|
+- 1 RCU (Read Capacity Unit) = 1 or 2 read of <=4 kB ops per second
|
|
|
|
+ - read sizes are rounded up to 4kB: 1 r/sec of 500B counts as 1 RCU
|
|
|
|
+ - 2 types of reads for 1 RCU:
|
|
|
|
+ - eventually consistent: 2 read/sec
|
|
|
|
+ - strongly consistent: 1 read/sec
|
|
|
|
+
|
|
|
|
+DDB replicates all writes, and uses eventual consistency:
|
|
|
|
+
|
|
|
|
+- eventual consistency uses the most available replicate, and is good for
|
|
|
|
+ - data that may be stale
|
|
|
|
+ - apps that do not query soon after writing
|
|
|
|
+- strong consistency checks all replicas for the most recent update, and is food for
|
|
|
|
+ - data that must be up-to-date
|
|
|
|
+ - applications that have a pattern of reading after writing
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+## 3.2 Calculating throughput capacity
|
|
|
|
+
|
|
|
|
+- DDB provides adjustement of WCU/RCU capacity with no downtime, by setting
|
|
|
|
+ minimum and maximum RCU/WCU expected for a table
|
|
|
|
+- To calculate these, we need:
|
|
|
|
+ - size of items in kB
|
|
|
|
+ - quantity of items read/written per second to the table
|
|
|
|
+ - required read consistency
|
|
|
|
+- Example: app reads 10 eventually consistent items/sec around 1kB each
|
|
|
|
+ - Round up item size to next 4kB -> 4kB = 1 Read Unit (RU)
|
|
|
|
+ - RU * rps: 1 * 10 = 10 RCU
|
|
|
|
+ - eventual consistency: divide RCU by 2 -> 5 RCU
|
|
|
|
+- Example: app reads 10 strongly consistent items/sec around 14kB each
|
|
|
|
+ - Round: 14kB -> 16kB = 4 RU
|
|
|
|
+ - RU * rps: 4 * 10 = 40 RCU
|
|
|
|
+ - strong consistency: don't divide -> 40 RCU
|
|
|
|
+- Example: app writes 10 items around (below) 7kB/second
|
|
|
|
+ - Round up : 7 -> 7 WU
|
|
|
|
+ - WU * rps: 7 * 10 = 70 WCU
|
|
|
|
+
|
|
|
|
+## 3.3 Table autoscaling
|
|
|
|
+
|
|
|
|
+- Apps which exceed capacity will have additional request throttled as fails
|
|
|
|
+- We don't want to over-provision constantly because of the cost
|
|
|
|
+- In that case use on-demand autoscaling instead of provisioned autoscaling
|
|
|
|
+
|
|
|
|
+| Provisioned Autoscaling | On-demande Autoscaling |
|
|
|
|
+|:----------------------------:|:-------------------------------:|
|
|
|
|
+| Predictable traffic patterns | Unpredictable traffic patterns |
|
|
|
|
+| Pay for provisioned capacity | Pay for amount of request |
|
|
|
|
+| Cap performand and price | Unlimited performance and price |
|