Professional Documents
Culture Documents
Amazon DynamoDB for 網工班
Amazon DynamoDB for 網工班
全受管、多區域、多主機的耐用資料庫
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
編號 稱呼 年齡 性別 喜好
Item2 1002 大強 男
AWS高併發架構 - DynamoDB
主索引鍵 Primary key
表格中的item 擁有獨一無二的 Primary key,可用來快速取得特定 item
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 的項目。
可以使用調整規模功能,根據使用率調整佈建的讀寫容量單位
AWS高併發架構 - DynamoDB
計費模式 - 隨需
不預先佈建讀寫容量單位
根據讀取與寫入請求數量計費
AWS高併發架構 - DynamoDB
寫入
寫入 PutItem:
將單一項目寫入資料表
更新或刪除資料的動作需指定主索引鍵
主索引鍵不可改
批次寫入 BatchWriteItem:
一次執行多筆寫入,最多可以將25個項目寫入資料表,容量上限16MB
AWS高併發架構 - DynamoDB
TTL 設定
設定項目何時過期,從資料庫中自動刪除
1002 大強 男
AWS高併發架構 - DynamoDB
條件寫入
一個寫入請求需要符合設定的條件才會成功寫入
讀取 GetItem: 編號 稱呼 年齡 性別 喜好
最快速取得資料的方式 1002 大強 男
批次讀取 BatchGetItem:
一次執行多筆讀取,最多讀取100個項目,容量上限16MB
AWS高併發架構 - DynamoDB
查詢 Query
擷取特定partition key 的所有項目,選擇性提供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 繼續下次掃描。
1002 23 牛哥
開始掃描,到達1MB上限
回傳內容與LastEvaluatedKey 1002 27 方芳
AWS高併發架構 - DynamoDB
平行掃描
透過多執行緒or應用程式實作平行掃描,需指定Segment 和TotalSegments
Segment:特定worker(執行緒or應用程式)要掃描的區段
TotalSegments:平行掃描的區段總數,此值必須等於使用的worker數目
全部資料切成三分
Segment 0 Segment 1 Segment 2
AWS高併發架構 - DynamoDB
平行掃描
AWS高併發架構 - DynamoDB
交易
交易讀取/寫入與標準讀取或寫入不同
交易請求可保證包含在單一交易集內的所有作業皆以一個集合的形式成功或失敗
簡單來說,一次交易不是全部成功,就是全部失敗
全部一起 全部一起
失敗 成功
PutItem PutItem
UpdateItem UpdateItem
UpdateItem UpdateItem
PutItem PutItem
UpdateItem 失敗 UpdateItem
AWS高併發架構 - DynamoDB
二級索引
由基礎資料表選擇部分或全部屬性 投影 而來
寫入資料時,會使用寫入容量單位將資料同步到所有二級索引
二級索引 基礎資料表
編號 稱呼 性別 喜好 編號 年齡 稱呼 性別 喜好
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 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
...
AWS高併發架構 - DynamoDB
DynamoDB Streams
選用功能
串流記錄出現的順序與項目實際修改順序相同
Write
一個區域最多只能有一個複本資料表
region 2
Write region 1
region 3
AWS高併發架構 - DynamoDB
專門的快取 DynamoDB Accelerator (DAX)
微秒為單位的回應時間
透過DAX客戶端寫入資料,DAX會自動將資料也寫入DynamoDB
你的App
DAX
AWS高併發架構 - DynamoDB
DynamoDB Accelerator (DAX)
1. DAX 用戶端發出 GetItem 請求。DAX 嘗試從
項目快取讀取請求的項目。如果項目位於快取
中 (「快取命中」),則 DAX 會將其傳回應用
程式。
4. DAX 將項目傳回應用程式。
例如:
● 授予許可,允許使用者唯讀存取資料表或二級索引中的特定項目和屬性。
● 授予許可,允許使用者根據該使用者的身分唯寫存取資料表中的特定屬性。
AWS高併發架構 - DynamoDB
資料加密
KMS
所有資料都受到完整靜態加密
SSL/TLS
傳輸資料使用HTTPS通訊協定
AWS高併發架構 - DynamoDB
總結
基礎資料表 RCU
Key Attribute
WCU
二級索引
○ 使用主控台
○ 使用 AWS CLI