DynamoDB的基本概念

2021-10-20 02:32:15 字數 2542 閱讀 6154

摘自官方文件:

amazon dynamodb 是一種完全託管的 nosql 資料庫服務,提供快速且可**的效能,同時還能夠無縫擴充套件。利用 dynamodb,您可以減輕操作和擴充套件分布式資料庫的管理負擔,這樣就不必擔心硬體預置、設定和配置、複製、軟體修補或集群擴充套件。dynamodb 還提供了靜態加密,從而消除了在保護敏感資料時涉及的操作負擔和複雜性。

對比傳統關係型資料庫(mysql),dynamodb擁有更高的讀寫效率以及更強的可拓展性。對於一款遊戲而言,爆款遊戲的使用者量可能在短短幾日內暴增上百倍(比如糖豆人),那麼這類遊戲乙個非常重要的需求就是高可拓展性的資料庫支撐。

如果對比redis呢?redis本質上只是以key-value形式儲存的,其優勢在於輕量級以及使用效率,但是對於乙個龐大的資料庫來說,redis的儲存方式過於單一,不能適應各種場景下的業務需求。

具體到可拓展性,mysql資料的表中的屬性是固定的,即便在新增新資料時沒有新增該屬性的值,其應該也有乙個預設值。mysql的視覺化更像是乙個excel,規範,標準。但dynamodb允許不同專案之間擁有不同的屬性列表,這就極大的提公升了資料的可拓展性。具象化一點,mysql是乙個多維陣列,引數固定;而dynamodb像是乙個樹,子節點的數量很隨意。

另外,dynamodb是由aws託管,本質上是一項web服務,計算在aws雲內完成,其互動使用無狀態的http(s)協議,並不需要使用者自己維持網路的永續性。

關於dynamodb和redis的具體區別,會在單獨的文章中詳述。

1 結構

dynamodb中的元件分為三個層次,分別是:

資料層面,dynamodb支援以下資料型別:

集set

一組相同資料型別的資料集合,可以理解為乙個vector

2 主鍵

dynamodb中的主鍵可以是兩種形式,一種是僅由分割槽鍵構成,另一種是由分割槽鍵+排序鍵構成。

首先來明確分割槽鍵的概念:

現在有一所高中開學分班,總共500名同學,如何均勻且隨機的把他們分到10個班裡呢?我們只要把學生的身份證號作為id,並且把該身份證號對10取模即可。那麼在dynamodb中,十個班就是分割槽,身份證號就是分割槽鍵,對10取模的演算法就是分割槽演算法。不難理解,分割槽演算法就是乙個雜湊函式。

那麼如果我想知道乙個學生是哪個班的,只需要對他的身份證號取模就可以了。這就是分割槽鍵的概念,通過對乙個唯一標識的hash來將資料分割槽,從而提高訪問效率。

接下來再看排序鍵的概念:

雖然分割槽可以提公升訪問效率,但是如果我想知道某個班級的學生中考分數超過500分的人數該怎麼做呢?首先我們可以在o(1)內訪問到目標班級,接下來就需要遍歷班級中的每乙個學生,並篩選出符合條件的學生,這個操作的時間複雜度為o(n)。這本質上就是乙個查詢操作,那麼對於查詢而言,有序資料中使用二分查詢不失為最優解法之一。

於是,排序鍵的作用就是在乙個分區內,根據另乙個指定的屬性值的大小對專案進行排序。本例中,假設排序鍵設定為中考分數,那麼我們就可以在o(logn)的時間內拿到我們想要的資料。

顯然,採用分割槽鍵+排序鍵結構的表訪問起來要更加高效。

3 二級索引

還是上面的例子,如果我想查詢1班數學成績大於85分的學生有哪些,則還是需要對1班所有人進行掃瞄。這時如果有另乙個排序鍵,以數學成績為排序標準,將會改善我們的搜尋效率。但此時已經有了一套主鍵,所以我們需要在表上建立一套新的「主鍵」,既索引。

這裡引入兩個二級索引的概念,分別是:

兩個索引都可以指定屬性投影。要理解屬性投影的概念,需要先知道乙個只有主鍵屬性的索引的侷限性。回到上例,我們通過乙個lsi可以實現對數學成績的快速查詢,但如果我要知道這名同學的語文成績呢?索引中並未提供。所以我們需要根據索引指定的資料再次回到基表中查詢該同學的資料,並拿到語文成績。

顯然這樣操作的開銷很大,為什麼我們不能像從基表中讀取資料一樣,直接從索引中讀取使用者的所有資料呢?所以屬性投影的作用就是,在二級索引中加入自己想要指定的屬性。該屬性可以是任何屬性,比如基表主鍵中的pk和sk,以及其他。另外,屬性的投影涉及到對於基表中資料的拷貝,這會造成額外的記憶體占用和資源消耗,在實際開發中應該根據具體需求合理地設計二級索引。

二級索引的主鍵必須是復合主鍵,既分割槽+排序模式,但這裡的主鍵與基表中主鍵的概念有所不同。對於一張資料表,其主鍵是資料的唯一標識id,是不可更改的(設計原則上)。那麼在二級索引的主鍵中,由於我們是自由指定屬性的,非基表主鍵的屬性都是可以同步更改的。這裡主要是要分清兩個主鍵的概念上的區別。

4 流可以理解為是一種log,流中會記錄你對錶的修改事件,具有24小時的生命週期。所以我們可以用流+觸發器配合的方式來實現一些功能。比如在遊戲設計中,某位玩家達成了一項成就,成就的資料會寫入資料庫中,流中就會出現這一次修改的記錄。當成就事件被觸發時,觸發器就可以向使用者傳送乙個恭喜使用者獲得某項成就的郵件。

dynamodb支援兩種一致性讀取,分別是:

另外,最終一性質讀取所占用的吞吐量單位時間內是強一致性吞吐量的1/2。這一部分是如何計算的呢?

dynamodb的備份由aws分布式計算框架完成,不消耗吞吐量,而且效率很高。在還原時還可以設定新的二級索引以及讀寫容量設定等。

另外,dynamodb支援連續備份+時間點恢復功能,可以把資料恢復到35天內的任意時間點。

基本概念 C 基本概念

由於工作中需要用到c 編寫的一些工具,有時候需要根據需求修改或者定製工具,所以現在不得不學習一下c 的基礎語法,此為筆記,不成章法!機器語言 組合語言 高階語言 面向過程的程式設計方法 物件導向的程式設計方法 泛型程式設計方法 1 演算法設計 2 源程式編輯 3 編譯 4 連線 5 執行除錯 輸入裝...

基本概念 數控系統基本概念

第一章 基本概念 數控工具機cnc是一種按事先編制好的加工零件程式進行加工的高效 自動化加工裝置。是 computer numerical control machine tools 的簡稱。數控工具機較好地解決了複雜 精密 小批量 多品種的零件加工問題,是一種柔性的 高效能的自動化工具機。西門子系...

pwm的基本概念

脈寬調變pwm是開關型穩壓電源中的術語。這是按穩壓的控制方式分類的,除了pwm型,還有pfm型和pwm pfm混合型。脈寬寬度調製式 pwm 開關型穩壓電路是在控制電路輸出頻率不變的情況下,通過電壓反饋調整其占空比,從而達到穩定輸出電壓的目的。pwm技術的基本原理 隨著電子技術的發展,出現了多種pw...