iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 14
0
Software Development

從Java進入AWS部署RESTful API的心路歷程系列 第 14

Day14-概觀(五)DynamoDB基本

  • 分享至 

  • xImage
  •  

什麼是 Amazon DynamoDB?

DynamoDB是AWS提供的database服務中的一個,屬於NoSQL資料庫類型,也就是Not only SQL。本篇列出了解DynamoDB基本概觀項目及AWS文件,是在使用前必須要了解的內容。有了正確的認知,對於之後的設計/使用上才不會背離服務應用特點。我個人認為DynamoDB屬於key-value資料庫類型。

如果你用過RDBMS(關聯性資料庫),就更要清楚了解DynamoDB元件設計上的相異之處,因為還是用RDBMS的資料設計方式會發現有的地方不適用,而且喪失DynamoDB的特性喔。

核心元件

DynamoDB 核心元件

  • 資料表(Table): 與其他資料庫系統一樣,儲存資料的集合,你可以按照資料表分成儲存使用者(人)、行為資料(事)、商品資料(物),或是其他你喜歡的方式分門別類。
  • 項目(Item): 一個項目即是一筆實際資料,可以類比為資料列(row),存取資料上最重要的單元,在怎麼存取項目這點上會是使用DynamoDB最重要的一環。
  • 屬性(Attribute): 在層級上對應的是資料欄(column),但是卻有很大的不同,除非是索引需要,否則使用上屬性是不需要被事先定義,也允許同張資料表中不同項目裡面,存在的屬性數目及類型都各不相同。

主索引鍵

理解DynamoDB可以說是理解整個設計及使用操作的核心所在,DynamoDB的索引原則上只有兩種類型。

  • 分割區索引鍵(Partition key): DynamoDB使用hash函式對分割區索引鍵進行處理並決定實體的儲存位置,所以也稱作Hash Attribute 。如果你對程式設計有點概念或是了解HashArray物件類型的使用方式,就可能猜的到以此為儲存項目的關鍵及特性,這點在之後會有更詳盡的說明。
  • 分割區索引鍵+排序索引鍵(Sort key): 配合分割區索引鍵再加上一個排序索引鍵,這是基於前者決定實際儲存的分割區位置後,在依排序索引鍵放在一起,也稱作Range Attribute 。複合索引可以讓你有彈性的查找資料,使用邏輯條件等。

當然因為是主要索引鍵,就必須是唯一存在,前者就是PK必須唯一,後者即是PK+SK必須唯一。要注意的是,索引就只有這兩種類型,無法存在僅有Sort key的索引。

次要索引

次要索引還有分兩種索引,但是原則上類型跟使用上跟主索引鍵都一樣,差別是次要索引僅是用來取得Item,或者說是用不同的角度來取得資料。

  • Global secondary index(全域次要索引): Hash或Hash+Range類型中,只要Hash的部分不是主索引的Partition key就是建立全域次要索引。除此之外還可以設定投影屬性等,在建立實作的時候會再解釋。
  • 本機次要索引: Hash或Hash+Range類型中,只要Hash的部分同於主索引的Partition key就是本機次要索引,你可以當作主索引的變形。

當然,以上次要索引就不須唯一存在了。
另外稍微要注意的是

DynamoDB 中的每個資料表限制為 20 個全域次要索引 (預設限制) 與 5 個本機次要索引。

補充

強調一點關鍵的概念是,DynamoDB屬於key-value類型,在RDBMS的index可以是加快搜尋的功能。但是在DynamoDB裡不是這樣,索引就是你找到資料的唯一方式,否則就是用Scan搜尋。 這有甚麼差別呢,只要跟你說一件事就好,AWS對於DynamoDB收取費用的方式是取得item的size,但是這不是指最終取得的result item,而是指從分割區取得資料的size。所以差別在於,Scan即代表將該Table所有Item取出後才篩選你要的result,也就是你查找的範圍都會計算費用
。當然,使用Scan還有其他取資料的問題跟特性,這點在未來如果有機會提到Scan或filter的時候會再提及


上一篇
Day13-實作(五)Jackson annotation
下一篇
Day15-環境準備(四)DynamoDB-Local
系列文
從Java進入AWS部署RESTful API的心路歷程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言