Amazon DynamoDB學(xué)習(xí)筆記(1)

什么是DynamoDB

Amazon DynamoDB 是一種完全托管的 NoSQL 數(shù)據(jù)庫服務(wù),提供快速而可預(yù)測的性能,能夠?qū)崿F(xiàn)無縫擴展。DynamoDB 可以從表中自動刪除過期的項,從而幫助您降低存儲用量,減少用于存儲不相關(guān)數(shù)據(jù)的成本。

DynamoDB工作原理

在DynamoDB中核心組件是表、項目和屬性。表是項目的集合,項目是屬性的集合,DynamoDB使用主鍵來標(biāo)識表中的每個項目,還提供了二級索引來提供更大的查詢靈活性,還可以使用DynamoDB流來捕獲DynamoDB表中的數(shù)據(jù)修改事件。

表、項目和屬性

  • DynamoDB將數(shù)據(jù)存儲在表中,表是某類數(shù)據(jù)的集合,例如People表、Cars表。
  • 項目 每個表包含多個項目,項目是一組屬性,具有不同于所有其他項目的唯一標(biāo)識,項目類似與SQL中的行、記錄或元組。
  • 屬性 每個項目包含一個或多個屬性,屬性是基本的數(shù)據(jù)元素,屬性類似與SQL中的字段或列。
    People表示例
  • 表中每個項目都有一個唯一的標(biāo)識符或主鍵(PersonID)用于將項目和表中的其他內(nèi)容區(qū)分開來
  • 除主鍵外,People表是無架構(gòu)的,這表示屬性和其數(shù)據(jù)類型都不需要預(yù)先定義,每個項目都能有自己獨特的屬性
  • 大部分屬性屬于標(biāo)量類型,這意味著它們只能有一個值,例如字符串或數(shù)字
  • 某些項目具有嵌套屬性(People表中的Address),DynamoDB最高支持32級深度的嵌套屬性

Music表示例


  • 與People表不同的是,Music表的項目主鍵有兩個屬性(ArtistSongTitle),表中的每個項目都必須包含這兩個屬性,ArtistSongTitle屬性的組合用于將表中的每個項目區(qū)分開來

主鍵

創(chuàng)建表時除了指定表名外還必須指定表的主鍵,主鍵用于唯一標(biāo)識表中的每一個項目,任意兩個項目的主鍵都不能相同。
DynamoDB支持兩種類型的主鍵:

  • 分區(qū)鍵 簡單的主鍵由一個分區(qū)鍵的屬性構(gòu)成,表中的每個項目都必須有不同的分區(qū)鍵值,分區(qū)鍵值用于DynamoDB內(nèi)部散列(Hash)函數(shù)的輸入,散列函數(shù)的輸出決定將項目存儲到哪個分區(qū)中。
  • 分區(qū)鍵和排序鍵 也稱復(fù)合鍵,該類型的主鍵由兩個屬性組成, 第一個屬性是分區(qū)鍵,第二個屬性是排序鍵,分區(qū)鍵決定存儲位置,具有相同分區(qū)鍵的項目按照排序鍵的值排序然后順序存儲在一起。在具有分區(qū)鍵和排序鍵的表中兩個項目可能有相同的分區(qū)鍵值,但是必須有不同的排序鍵值。
    注意
    每個主鍵屬性必須為標(biāo)量,主鍵屬性的數(shù)據(jù)類型只能是字符串、數(shù)字和二進(jìn)制。

二級索引

可以在表上建立一個或多個二級索引,利用二級索引,除了可以用主鍵進(jìn)行查詢外,還可以使用替代鍵查詢表中的數(shù)據(jù)。
DynamoDB支持兩種索引:

  • 全局二級索引(Global secondary index) 一種可能帶有與表中不同的分區(qū)鍵和排序鍵的索引
  • 本地二級索引(Local secondary index) 一種分區(qū)鍵與表中的相同但排序鍵與表中不同的索引

每個表最多可以定義5個全局二級索引和5個本地二級索引。
前面的Music示例表中可以按Artist(分區(qū)鍵)或按ArtistSongTitle(分區(qū)鍵和排序鍵)進(jìn)行數(shù)據(jù)查詢。若要按GenreAlbumTitle查詢數(shù)據(jù)要該怎么做?
這時我們可以在GenreAlbumTitle上創(chuàng)建一個二級索引,然后通過相同的方式查詢索引。
下面的Music示例表包含了一個名為GenreAlbumTitle的新索引,索引中Genre是分區(qū)鍵,AlbumTitle是排序鍵。

  • 每一個索引屬于一個表(稱為索引的基表),上面Music是GenreAlbumTitle索引的基表.
  • DynamoDB會自動維護(hù)索引,當(dāng)你添加、更新或刪除基表中的某個項目時,DynamoDB會自動添加、更新或刪除屬于該表的任何索引中的對應(yīng)項目
  • 在創(chuàng)建索引時可以指定哪些屬性將從基表復(fù)制或投影到索引。不指定的情況下DynamoDB至少也會將鍵屬性投影到索引中,如上面所示,此時GenreAlbumTitle索引中至少有Music表中的鍵屬性(ArtistSongTitle)

DynamoDB流

DynamoDB是一項可選功能,它用于捕獲DynamoDB表中的數(shù)據(jù)修改事件。有關(guān)這些事件的數(shù)據(jù)將按事件發(fā)生的順序近乎實時的出現(xiàn)在流中。
每個事件由一條流記錄表示,若對表啟用了流,每當(dāng)以下事件之一 發(fā)生時,DynamoDB流都會寫入一條流記錄:

  • 如果向表中添加了新項目,流將捕獲整個項目的映像(包括其所有屬性)
  • 如果更新了項目,流將捕獲項目中任何已修改屬性的"之前""之后"映像
  • 如果從表中刪除了項目,流將在整個項目被刪除前捕獲其映像
    每條流記錄還包含表名稱、事件時間戳和其他元數(shù)據(jù)。流記錄的有效事件為24小時,過此事件后記錄將被自動刪除

擴展

DynamoDB流可以和AWS Lambda結(jié)合使用以創(chuàng)建觸發(fā)器,即在流中有你感興趣的事件出現(xiàn)時自動執(zhí)行Lambda中的代碼。
例如,假設(shè)有一個包含某公司客戶信息的 Customers 表。假設(shè)你希望向每位新客戶發(fā)送一封“歡迎”電子郵件。你可對該表啟用一個流,然后將該流與 Lambda 函數(shù)關(guān)聯(lián)。Lambda 函數(shù)將在有新項目添加到Customers表的流記錄發(fā)生時執(zhí)行。若該新項目有EmailAddress屬性,Lambda 函數(shù)將調(diào)用 Amazon Simple Email Service (Amazon SES) 以向該地址發(fā)送電子郵件。


此示例中最后一位客戶將不會收到電子郵件,因為他沒有EmailAddress屬性。
除了觸發(fā)器之外,DynamoDB流還提供更強大的解決方案,例如AWS區(qū)域內(nèi)或跨區(qū)域數(shù)據(jù)復(fù)制,DynamoDB表中的數(shù)據(jù)具體化視圖,使用Kinesis具體化視圖的數(shù)據(jù)分析等。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容