You are on page 1of 55

Amazon DynamoDB

全受管、多區域、多主機的耐用資料庫
AWS高併發架構 - DynamoDB
特色
全受管、多區域、多
資料皆存於SSD
主機

可存放無限筆資料 鍵值型資料庫

DynamoDB

任何規模下達到不到 每秒最多可支援超過
10 毫秒的效能 2,000 萬個請求
AWS高併發架構 - DynamoDB
資料的長相
以水果資料表為例,FruitName 和 FruitPrice 組成每個項目的主鍵。

一個項目儲存方式如右,是JSON格式,除了主鍵以外,其餘屬性可以自由增減。
AWS高併發架構 - DynamoDB
名詞介紹:資料表、項目、屬性
一張 Table 含有 0~n 個 Item
一個 Item 含有 1~n 個 Attribute Key 也是一種屬性,用來識別Item
每個Item 上限400KB

Item Key 1 Attribute

Table Item Key 2 Attribute

Item Key 3 Attribute


AWS高併發架構 - DynamoDB
鍵與值
DynamoDB 屬於鍵值型資料庫,透過鍵(key) 快速找到值(value)

主鍵 (必須唯一) 屬性 (每個item 可不同)

Item Key Value

編號 稱呼 年齡 性別 喜好

Item1 1001 小明 32 女 巧克力

Item2 1002 大強 男
AWS高併發架構 - DynamoDB
主索引鍵 Primary key
表格中的item 擁有獨一無二的 Primary key,可用來快速取得特定 item

Primary key 包含 Partition key 與 Sort key (選用)


AWS高併發架構 - DynamoDB
分區與排序
item 會根據Partition key存放於不同分區

每個分區中的item 會依照Sort key 排序


主鍵 (必須唯一) 屬性 (每個item 可不同)

Item Partition Key Sort Key Value

32 小明
編號 年齡 稱呼 性別 喜好
partition 1
Item1 1001 32 小明 女 巧克力

1002 18 大強 男
Item2 18 大強
partition 2
23 牛哥
Item2 1002 23 牛哥
AWS高併發架構 - DynamoDB
使用表格
透過API 來操作 DynamoDB

需留意資料一致性

讀取與寫入需使用容量單位
AWS高併發架構 - DynamoDB
資料一致性
由於DynamoDB 會自動在同一區域下的多個可用區複寫資料

複寫期間,有些可用區的資料尚未更新,這時讀取操作可能會取得舊資料

最終一致讀取 Read AZ 1
發出讀取請求,從任一可
用區讀取資料。
速度較強式一致讀取快。
Write AZ 2
可能取得舊資料。

強式一致讀取
發出讀取請求,確保回傳 AZ 3
最新的資料。
消耗較多讀取容量單位
AWS高併發架構 - DynamoDB
讀取容量單位 (RCU)
每個從表格讀取資料的 API 呼叫即視為一個讀取請求。
一個讀取容量單位代表每秒一個強式一致讀取,或每秒兩個最終一致讀取,適用於
大小上限為 4 KB 的項目。

● 最終一致讀取 8 KB 項目的請求需要 1 個 RCU;


● 強式一致讀取 8 KB 項目的請求需要 2 個 RCU ;
● 交易讀取 8 KB 項目的請求則需要 4 個 RCU。
AWS高併發架構 - DynamoDB
寫入容量單位 (WCU)
每個寫入資料到表格的 API 呼叫即視為一個寫入請求。
一個寫入容量單位代表每秒一個寫入,適用於大小上限為 1 KB 的項目。

● 標準寫入 1 KB 項目的請求需要 1 個 WCU;


● 交易寫入 1 KB 項目的請求則需要 2 個 WCU。
AWS高併發架構 - DynamoDB
計費模式 - 已佈建
預先佈建讀寫容量單位

可以使用調整規模功能,根據使用率調整佈建的讀寫容量單位
AWS高併發架構 - DynamoDB
計費模式 - 隨需
不預先佈建讀寫容量單位

根據讀取與寫入請求數量計費
AWS高併發架構 - DynamoDB
寫入
寫入 PutItem:

將單一項目寫入資料表

更新或刪除資料的動作需指定主索引鍵

主索引鍵不可改

批次寫入 BatchWriteItem:

一次執行多筆寫入,最多可以將25個項目寫入資料表,容量上限16MB
AWS高併發架構 - DynamoDB
TTL 設定
設定項目何時過期,從資料庫中自動刪除

TTL 屬性的數值必須是 Number 資料類型, Unix epoch 時間格式的時間戳記。

時間: 2020-07-07 7:7:7 ,時間戳記: 1594076827。

Id Nickname Age Gender FavoriteFood ExpirationTime

1001 小明 32 女 巧克力 1594076827

1002 大強 男
AWS高併發架構 - DynamoDB
條件寫入
一個寫入請求需要符合設定的條件才會成功寫入

寫入項目時加入 ConditionExpression 參數,設定所需的條件


AWS高併發架構 - DynamoDB
讀取 使用1001找到小明

讀取 GetItem: 編號 稱呼 年齡 性別 喜好

指定主索引鍵來取得資料 1001 小明 32 女 巧克力

最快速取得資料的方式 1002 大強 男

批次讀取 BatchGetItem:

一次執行多筆讀取,最多讀取100個項目,容量上限16MB
AWS高併發架構 - DynamoDB
查詢 Query
擷取特定partition key 的所有項目,選擇性提供sort key條件縮小範圍

可以查詢任何有複合主鍵(包含partition & sort key)的資料表或索引

查詢結果上限1MB,超過部分系統會回傳LastEvaluatedKey,可將此值帶入參數
ExclusiveStartKey 繼續下次查詢

partition 1 partition 2
在特定分區索引鍵中,可以對
sort key使用條件
1001 32 小明 1002 18 大強 如右,查詢partition key = 1002
且sort key < 25 的資料
1002 23 牛哥

1002 27 方芳
AWS高併發架構 - DynamoDB
掃描 Scan
擷取資料表或索引中所有項目,可剔除不需要的部分再回傳,但仍須使用RCU

掃描結果上限1MB,超過部分系統會回傳LastEvaluatedKey,可將此值帶入參數
ExclusiveStartKey 繼續下次掃描。

partition 1 partition 2 將LastEvaluatedKey當作


ExclusiveStartKey的值,進行
1001 32 小明 1002 18 大強 下一次掃描

1002 23 牛哥
開始掃描,到達1MB上限
回傳內容與LastEvaluatedKey 1002 27 方芳
AWS高併發架構 - DynamoDB
平行掃描
透過多執行緒or應用程式實作平行掃描,需指定Segment 和TotalSegments

Segment:特定worker(執行緒or應用程式)要掃描的區段

TotalSegments:平行掃描的區段總數,此值必須等於使用的worker數目

Worker 1 Worker 1 Worker 2


Segment=0 Segment=1 Segment=2
totalSegments=3 totalSegments=3 totalSegments=3

全部資料切成三分
Segment 0 Segment 1 Segment 2
AWS高併發架構 - DynamoDB
平行掃描
AWS高併發架構 - DynamoDB
交易
交易讀取/寫入與標準讀取或寫入不同

交易請求可保證包含在單一交易集內的所有作業皆以一個集合的形式成功或失敗

簡單來說,一次交易不是全部成功,就是全部失敗

全部一起 全部一起
失敗 成功
PutItem PutItem
UpdateItem UpdateItem
UpdateItem UpdateItem
PutItem PutItem
UpdateItem 失敗 UpdateItem
AWS高併發架構 - DynamoDB
二級索引
由基礎資料表選擇部分或全部屬性 投影 而來

寫入資料時,會使用寫入容量單位將資料同步到所有二級索引

二級索引 基礎資料表
編號 稱呼 性別 喜好 編號 年齡 稱呼 性別 喜好

1001 小明 女 巧克力 1001 32 小明 女 巧克力

1002 大強 男 1002 18 大強 男

1002 牛哥 1002 23 牛哥
AWS高併發架構 - DynamoDB
本地二級索引 Local Secondary Index (LSI)
Partition Key 與基礎資料表相同,Sort Key 可調整。

一張基礎資料表預設最多可以設定5個本地二級索引。

必須在創鍵表格時創建本地二級索引。 基礎資料表
partition key sort key A

本地二級索引 本地二級索引

本地二級索引 本地二級索引

本地二級索引

partition key sort key B


AWS高併發架構 - DynamoDB
本地二級索引 限制
若有設定本地二級索引,相同partition key 的資料容量上限10 GB。

(基礎資料表+所有本地二級索引 <= 10GB)

讀取和寫入活動會使用基礎資料表佈建的輸送容量。
基礎資料表
partition key sort key A

本地二級索引 1 總共 <= 10 GB
partition key sort key B

相同的讀寫容量單位
本地二級索引 2
partition key sort key C
AWS高併發架構 - DynamoDB
全域二級索引 Global Secondary Index (GSI)
Partition Key 與Sort Key 都可調整。

每張基礎資料表預設最多20個全域二級索引。

有獨立於基礎資料表的讀取和寫入容量單位。
基礎資料表
僅支援最終一致讀取。 partition key sort key A

預設最多20個 (可申請調整) 全域二級索引 1


partition key 2 sort key B
獨立的讀寫容量單位
全域二級索引 2
不能強式一致讀取 partition key 3 sort key C

...
AWS高併發架構 - DynamoDB
DynamoDB Streams
選用功能

可擷取 DynamoDB 資料表中的資料修改事件 (新增、修改、刪除)

串流記錄出現的順序與項目實際修改順序相同

Write

寫入資料至DynamoDB 產生串流紀錄 擷取串流紀錄做其他應用


AWS高併發架構 - DynamoDB
四種寫入串流的選擇
Keys only (僅限索引鍵) – 僅限已修改項目的索引鍵屬性。

New image (新影像) – 整個項目,修改後的影像。

Old image (舊影像) – 整個項目,修改前的影像。

New and old images (新舊影像) – 項目的新舊影像。


AWS高併發架構 - DynamoDB
概念 – DynamoDB 與 DynamoDB Streams
● DDB 與DDB Streams 使用相同區域(region)的不同服務端點。
● 若要使用資料表或索引,需存取DDB的端點
● 要處理DDB Streams 紀錄,則需存取DDB Streams端點
AWS高併發架構 - DynamoDB
概念 – DynamoDB Streams 設計模式
建造一個近乎及時的資料同步解決方案,可搭配Lambda 讀取Streams 記錄,並發
佈至其他需要的服務。
AWS高併發架構 - DynamoDB
全域資料表
全域資料表是一個或多個複本資料表的集合

一個區域最多只能有一個複本資料表

複本資料表之間會透過DynamoDB Streams 快速複寫新資料

region 2

Write region 1

region 3
AWS高併發架構 - DynamoDB
專門的快取 DynamoDB Accelerator (DAX)
微秒為單位的回應時間

與 DynamoDB API 相容的受管服務

透過DAX客戶端寫入資料,DAX會自動將資料也寫入DynamoDB

你的App

DAX
AWS高併發架構 - DynamoDB
DynamoDB Accelerator (DAX)
1. DAX 用戶端發出 GetItem 請求。DAX 嘗試從
項目快取讀取請求的項目。如果項目位於快取
中 (「快取命中」),則 DAX 會將其傳回應用
程式。

2. 如果項目無法使用 (「快取未中」),則 DAX


會對 DynamoDB 執行最終一致的 GetItem 操
作。

3. DynamoDB 會傳回所請求的項目,而 DAX 會


將其存放在項目快取中。

4. DAX 將項目傳回應用程式。

5. (未顯示) 如果 DAX 叢集包含超過一個節點,


則會將項目複寫至叢集中的所有其他節點。
AWS高併發架構 - DynamoDB
身分驗證 (已登入) 和授權 (具有許可)
IAM

控制身分驗證 (已登入) 和授權 (具有許可) 來使用 DynamoDB 資源

例如:

● 授予許可,允許使用者唯讀存取資料表或二級索引中的特定項目和屬性。
● 授予許可,允許使用者根據該使用者的身分唯寫存取資料表中的特定屬性。
AWS高併發架構 - DynamoDB
資料加密
KMS

所有資料都受到完整靜態加密

靜態加密使用存放在 AWS KMS 中的加密金鑰

SSL/TLS

傳輸資料使用HTTPS通訊協定
AWS高併發架構 - DynamoDB
總結
基礎資料表 RCU
Key Attribute
WCU
二級索引

DAX DynamoDB Streams


AWS高併發架構 - DynamoDB
存取 DynamoDB
有多種方式可以存取DynamoDB

○ 使用主控台

○ 使用 AWS CLI

○ 使用 API (Python SDK)

○ 使用NoSQL Workbench 或 Adminer 圖形化介面(docker)


使用主控台操作DynamoDB
DynamoDB操作 -建立資料表
● 在 DynamoDB 主控台中選取建立資料表
DynamoDB操作 -建立資料表
● 輸入資料表名稱
● 輸入分區索引鍵
● 勾選 新增排序索引鍵 並輸入
● 取消勾選 使用預設設定
○ 觀察可設定內容
○ 此處不變更設定內容
● 填寫完成後按下建立 取消勾選看看預設內容
DynamoDB操作 -建立資料表
● 建立完成時的頁面
DynamoDB操作 -建立項目
● 點擊項目 -> 建立項目
● 填寫內容並儲存
● 新增多筆資料後可開始設定查詢條件
DynamoDB操作 -查詢
● 下拉選單,把掃描改成查詢
● 填寫查詢條件,必須指定分區索引鍵值,其餘選填。
DynamoDB操作 -刪除項目
● 勾選準備刪除之項目
● 點選操作下拉選單
● 點選刪除
DynamoDB操作 -刪除NoSQL表
● 勾選準備刪除的表
● 點擊刪除資料表
○ 跟RDS一樣可以刪除前建立備份
備份與還原
隨需備份
隨需備份
隨需備份
還原備份
還原備份
• 相當於用備份創造新表格
還原備份
還原備份
• 還原需要一段時間
時間點復原
• 可以選擇35天內任何時間點
• 其餘與還原備份相同
RDS vs. DynamoDB
RDS DynamoDB
備份還原 自動 Snapshot (Point-in-time 預設7天,最 Point-in-time 時間點復原 (一律35天)
多35天) 隨需備份
手動 Snapshot 刪除前備份
最終 Snapshot
操作目標 Database 層級 Table 層級
HA 可以啟用Multi-AZ,產生Standby 資料庫 內建高可用性與耐久性
備份時效 未啟用Multi-AZ:由master負擔 PITR、備份和復原不會耗用任何表格佈
能影響 啟用Multi-AZ:由standby負擔 建的容量。程序可隨時執行,不會對生
產應用程式的效能和可用性造成影響。

讀寫效率 由Read Replica 唯讀副本實現讀取效率 由讀寫單元數量決定

You might also like