日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

DynamoDB入门知识和一些注意事项

發(fā)布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 DynamoDB入门知识和一些注意事项 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是DynamoDB

Amazon DynamoDB分布式NoSQL數(shù)據(jù)庫服務,支持動態(tài)擴展,性能可靠

DynamoDB基本概念

DynamoDB的組成

表:表示用來存儲DynamoDB數(shù)據(jù),它類似于關系型數(shù)據(jù)庫的“表”
項目:表中可以有0 到 N(N > 0)個項目,它類似于關系型數(shù)據(jù)庫的“行”,在DynamoDB中,項目數(shù)量是沒有限制的。
屬性:多個屬性組成了一個項目,它類似于關系型數(shù)據(jù)庫中的“字段”。DynamoDB中表除了主鍵外都是無架構的,因此在項目里可以有不同的屬性、大小、數(shù)據(jù)類型

DynamoDB主鍵

DynamoDB中使用主鍵標識唯一的項目,在創(chuàng)建表時必須指定主鍵。DynamoDB主鍵支持兩種類型

單個分區(qū)鍵組成的主鍵:由一個分區(qū)鍵屬性組成,他標識了唯一的項目,同時也覺得項目存儲到哪個分區(qū)。DynamoDB根據(jù)內(nèi)部散列函數(shù)計算分區(qū)鍵的值,其結果用來決定將項目存儲到哪個分區(qū)。
分區(qū)鍵 + 排序鍵:在單個分區(qū)鍵基礎上加上排序鍵,由這兩個屬性組成復合主鍵。同樣,分區(qū)鍵決定項目存儲到哪個分區(qū),排序鍵決定在同一個分區(qū)內(nèi)相同分區(qū)鍵的項目的排列順序。

DynamoDB流

DynamoDB流可以捕獲表中的數(shù)據(jù)修改事件,這些事件以發(fā)生的順序?qū)懭氲搅髦小A饔猩芷冢瑥挠嬋氲浇Y束一共有24小時,到期后將從流中自動刪除。

以下幾個事件將觸發(fā)流的產(chǎn)生

向表添加新項目時,此時流會捕獲整個項目即所有屬性
更新項目時,此時流將波或項目中已修改的屬性
刪除項目時,流在項目被刪除前捕獲

DynamoDB二級索引

DynamoDB提供了本地二級索引和全局二級索引,二者有一定的差異。

本地二級索引 全局二級索引
概念

本地二級索引的含義是“本地”,意思是說二級索引的索引范圍限定為具有相同分區(qū)鍵的表分區(qū)。

也就是說該索引只能在同一個分區(qū)中索引

全局是指對索引執(zhí)行的查詢可以跨基表中所有分區(qū)的所有數(shù)據(jù)
一致性 支持強一致性 僅支持最終一致性
限制 一個表中只能創(chuàng)建5個本地二級索引 一個表中只能創(chuàng)建5個全局二級索引

DynamoDB讀寫限制

在創(chuàng)建表時需指定表的讀取、寫入的吞吐量。在生產(chǎn)環(huán)境中如果實際吞吐量超過了當前為DynamoDB設置的吞吐量,在經(jīng)過重試后(如果DynamoDB Client設置了重試機制)最終將會拋出異常。

讀取吞吐量單位:讀取吞吐量取決于項目的大小以及是需要最終一致性還是強一致性
最終一致性的讀取容量單位 = 2次4KB項目讀 / 秒
強一致性的讀取容量單位 = 1次4KB讀 / 秒
如果一次讀取大于4KB的項目,DynamoDB要消耗額外的讀取容量單位。
寫入吞吐量單位:寫入容量單位取決于寫入項目的大小。
一個寫入容量單位 = 1次最多1KB的項目寫入 / 秒
如果需要寫入大于1KB的項目,DynamoDB需要消耗額外的寫入容量單位。
其他限制:DynamoDB規(guī)定一個項目大小上限為400KB,如果項目的大小超過了這個限制將會消耗更多的容量單位。

一旦超過DynamoDB的限制,那么請求會被限制,這種錯誤在程序中是無法自動恢復的,因此需要合理設置吞吐量和一個項目大小。

DynamoDB吞吐量預置值計算

吞吐量在創(chuàng)建表時候可以指定,在運行中的線上業(yè)務也可以通過DynamoDB后臺可視化界面或提供的API動態(tài)調(diào)整。API方式相對來說非常靈活。注意:DynamoDB每天每個表僅允許向下調(diào)整4次,向上調(diào)整無限制。

這個預置值有一套計算方式,如果您的業(yè)務讀寫量可預估那么請參考下面公式

強一致性讀取容量計算:向上取整(項目大小 / 4KB) * 預計每秒讀取個數(shù)
比如:強一致性讀要求,一個項目大小為3KB,期望每秒讀80個項目。
3KB / 4KB = 0.75 ,向上取整后 = 1
1 * 80 = 80個讀取容量單位
最終一致性讀取容量計算:與強一致性讀取容量計算方式一樣,在最終結果上 * 2
寫入容量計算:向上取整(項目大小 / 1KB) * 預計每秒寫入個數(shù)
比如:項目大小為512字節(jié),期望打到每秒寫入100個項目。
512字節(jié) / 1KB = 0.5 向上取整 = 1
1 * 100 = 100個寫入容量單位

DynamoDB分區(qū)

初始分區(qū)數(shù)計算

在數(shù)據(jù)存儲時,DynamoDB會將表的項目劃分至多個分區(qū),并由SSD支撐。數(shù)據(jù)的分布主要是根據(jù)分區(qū)值決定。

DynamoDB服務全權負責分區(qū)的管理,包括起始表分區(qū)個數(shù)、分區(qū)拆分。

首先我們需要知道,在DynamoDB中一個分區(qū)大約可保存10GB的數(shù)據(jù),最多支持每秒3000個讀請求和每秒1000個寫請求。

在創(chuàng)建一個表時,會根據(jù)預置的讀寫吞吐量初始化表分區(qū)個數(shù),計算公式如下:

初始化分區(qū)個數(shù) = 向上取整( (讀取預設吞吐量 / 3000) + (寫入預設吞吐量 / 1000) )

比如:讀取預設5000,寫入預設2000,那么套用公式(5000 / 3000) + (2000 / 1000) = 3.6667 向上取整后 = 4個分區(qū)數(shù)

那么每個分區(qū)的可以支持5000 / 4 = 1250個讀和(2000 / 4) = 500個寫

分區(qū)拆分

DynamoDB是可以動態(tài)擴容的,吞吐量也可以保證。但這些都是基于它的分區(qū)設計。

分區(qū)拆分方式

既然是DynamoDB全權負責分區(qū)管理,那么分區(qū)拆分的時機和方式由DynamoDB決定。當必要的時候DynadmoDB會自動拆分現(xiàn)有的分區(qū),以提供更多的分區(qū)以支持吞吐量。我們首先了解拆分的方式

圖中第1步,DynamoDB會分配兩個新分區(qū)
圖中第2步,DynamoDB將原分區(qū)數(shù)據(jù)均勻分配到新分區(qū)
圖中第3步,DynamoDB不再給原分區(qū)分配數(shù)據(jù)

分區(qū)拆分觸發(fā)條件

上面提到,“在DynamoDB中一個分區(qū)大約可保存10GB的數(shù)據(jù),最多支持每秒3000個讀請求和每秒1000個寫請求”

那么分區(qū)觸發(fā)條件也是圍繞著分區(qū)實際存儲量和讀寫來觸發(fā)的。

預置吞吐量增加:如果當前分區(qū)表不能滿足新的預置吞吐量時,DynamoDB會將當前的分區(qū)數(shù)量擴充一倍

圖中表示的是,起初表分配了4個分區(qū)(讀取預設5000,寫入預設2000,那么套用公式(5000 / 3000) + (2000 / 1000) = 3.6667 向上取整后 = 4個分區(qū)數(shù))
每個分區(qū)有1250個讀取單元和500個寫入單元,此時將讀容量從5000調(diào)整到8000時,此時4個分區(qū)不能滿足了,DynamoDB將分區(qū)數(shù)翻倍 4 * 2 = 8個分區(qū),因此每個分區(qū)醬油1000個讀取單元和250個寫入單元

存儲要求增加:如果某個分區(qū)數(shù)據(jù)超過了限制的10G,DynamoDB將把這個分區(qū)拆成兩個,并且數(shù)據(jù)平均分配到新的兩個分區(qū)中。造成某個分區(qū)超過限制10G的原因有很多,其中比較常見的就是分區(qū)鍵散列度不夠,導致數(shù)據(jù)偏移到某一個分區(qū)。

如圖,紅框分區(qū)填滿數(shù)據(jù)后,DynamoDB將把這個分區(qū)拆出兩個新分區(qū),在拆之前,總容量上限為8個分區(qū) * 10GB容量 = 80GB,拆后總容量上限為9個分區(qū) * 10GB容量 = 90GB
注意:這種從分區(qū)拆出的兩個分區(qū)只會共享原分區(qū)的讀寫吞吐量。舉個例子:
5000讀和2000寫,DynamoDB此時創(chuàng)建4個分區(qū),每個分區(qū)讀寫容量為
5000 / 4 = 1250讀取容量
2000 / 4 = 500 寫入容量
假設其中一個分區(qū)即將滿10G,DynamoDB會將這個分區(qū)拆出兩個分區(qū),此時這個表共有5個分區(qū),他們的寫入容量分別為
其中3個分區(qū)讀寫容量依然是1250讀取容量和500寫入容量,被拆出的兩個分區(qū)讀寫為1250 / 2 = 625讀取和500 / 2 = 250寫入

參考:https://docs.aws.amazon.com/zh_cn/amazondynamodb/latest/developerguide/Introduction.html

總結

以上是生活随笔為你收集整理的DynamoDB入门知识和一些注意事项的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。