国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Amazon DynamoDB 入門2:工作原理、API和數(shù)據(jù)類型介紹

王陸寬 / 1024人閱讀

摘要:使用此值作為其哈希函數(shù)的輸入值,從而生成可從中找到該項(xiàng)目的分區(qū)。在這種情況下,會(huì)根據(jù)字符串的哈希值,使用其哈希函數(shù)決定新項(xiàng)目的存儲(chǔ)位置。使用分區(qū)鍵值作為對(duì)內(nèi)部哈希函數(shù)的輸入。可使用字符串?dāng)?shù)據(jù)類型表示日期或時(shí)間戳。

本節(jié)主要介紹DynamoDB 基本概念、核心組件、數(shù)據(jù)結(jié)構(gòu)、Api

DynamoDB 基本概念

DynamoDB 是 AWS 獨(dú)有的完全托管的 NoSQL Database。它的思想來源于 Amazon 2007 年發(fā)表的一篇論文:Dynamo: Amazon’s Highly Available Key-value Store。在這篇論文里,Amazon 介紹了如何使用 Commodity Hardware 來打造高可用、高彈性的數(shù)據(jù)存儲(chǔ)。想要理解 DynamoDB,首先要理解 Consistent Hashing。Consistent Hashing 的原理如下圖所示:

它的概念是:

我有一個(gè)足夠大的Keyspace(2的160次方,比較一下:IPv6是2的128次方),我們記作X。

然后將X放在一個(gè)環(huán)形的空間里劃分成大小相等的Y個(gè) Partition,依次循環(huán)排列(如圖),每個(gè) Partition 由一個(gè)Vnode(Riak的概念)管理,

當(dāng)你有M個(gè)Database Server(Node),Y個(gè)Vnode再平均映射到M個(gè)Node上。

當(dāng)數(shù)據(jù)要插入時(shí),將其主鍵(Hash Key)映射到K中的一個(gè)地址(Addr),對(duì)應(yīng)到某個(gè)Vnode,再進(jìn)一步對(duì)應(yīng)到某個(gè)Node,如果這個(gè)數(shù)據(jù)需要N個(gè)Replica,則將數(shù)據(jù)寫入Addr(Vnode a),Addr + 1(Vnode b), …,Add + N(Vnode n)。

這里,M就是你的Shards,N是Replica。

以后添加新的Node時(shí),映射發(fā)生變化,只需要把相應(yīng)的變化了的Vnode遷移到新的Node上即可。在這種結(jié)構(gòu)下,Sharding/Replica對(duì)程序員基本上是透明的。

DynamoDB 核心組件

基本 DynamoDB 組件包括:表、項(xiàng)目、屬性

表 - 類似于其他數(shù)據(jù)庫(kù)系統(tǒng),DynamoDB將數(shù)據(jù)存儲(chǔ)在表中。表是數(shù)據(jù)的集合。(類似于關(guān)系型數(shù)據(jù)庫(kù)中的表)

項(xiàng)目 - 每個(gè)表包含多個(gè)項(xiàng)目。項(xiàng)目是一組屬性,具有不同于所有其他項(xiàng)目的唯一標(biāo)識(shí)。(類似于其他數(shù)據(jù)庫(kù)系統(tǒng)中的行、記錄或元組。)

屬性 - 每個(gè)項(xiàng)目包含一個(gè)或多個(gè)屬性。屬性是基礎(chǔ)的數(shù)據(jù)元素,無需進(jìn)一步分解。(類似于其他數(shù)據(jù)庫(kù)系統(tǒng)中的字段或列。)

下圖是一個(gè)名為 People 的表,其中顯示了一些示例項(xiàng)目和屬性:

請(qǐng)注意有關(guān) People 表的以下內(nèi)容:

表中的每個(gè)項(xiàng)目都有一個(gè)唯一的標(biāo)識(shí)符或主鍵,用于將項(xiàng)目與表中的所有其他內(nèi)容區(qū)分開來。在 People 表中,主鍵包含一個(gè)屬性 (PersonID)。

與主鍵外不同,People表是無架構(gòu)的,這表示屬性及其數(shù)據(jù)類型都不需要預(yù)先定義。每個(gè)項(xiàng)目都能擁有其自己的獨(dú)特屬性。

大多數(shù)屬性是標(biāo)量類型的,這表示它們只能具有一個(gè)值。字符串和數(shù)字是標(biāo)量的常見示例。

某些項(xiàng)目具有嵌套屬性 (Address)。DynamoDB 支持最高 32級(jí)深度的嵌套屬性。

這里,我們將看到第一個(gè)概念:主鍵。

主鍵

創(chuàng)建表時(shí),除表名稱外,您還必須指定表的主鍵。主鍵唯一標(biāo)識(shí)表中的每個(gè)項(xiàng)目,因此,任意兩個(gè)項(xiàng)目的主鍵都不相同。
DynamoDB 支持兩種不同類型的主鍵:

分區(qū)鍵 - 簡(jiǎn)單的主鍵,由一個(gè)稱為分區(qū)鍵的屬性組成。

如果表具有簡(jiǎn)單主鍵(只有分區(qū)鍵),DynamoDB 將根據(jù)其分區(qū)鍵值存儲(chǔ)和檢索各個(gè)項(xiàng)目。同時(shí),DynamoDB 使用分區(qū)鍵的值作為內(nèi)部哈希函數(shù)的輸入值,從而將項(xiàng)目寫入表中。哈希函數(shù)的輸出值決定了項(xiàng)目將要存儲(chǔ)在哪個(gè)分區(qū)。

要從表中讀取某個(gè)項(xiàng)目,必須為該項(xiàng)目指定分區(qū)鍵值。DynamoDB 使用此值作為其哈希函數(shù)的輸入值,從而生成可從中找到該項(xiàng)目的分區(qū)。(此時(shí),分區(qū)鍵必須是唯一的,不可重復(fù)。)

下圖顯示了名為 Pets 的表,該表跨多個(gè)分區(qū)。表的主鍵為 AnimalType(僅顯示此鍵屬性)。在這種情況下,DynamoDB 會(huì)根據(jù)字符串 Dog 的哈希值,使用其哈希函數(shù)決定新項(xiàng)目的存儲(chǔ)位置。請(qǐng)注意,項(xiàng)目并非按排序順序存儲(chǔ)的。每個(gè)項(xiàng)目的位置由其分區(qū)鍵的哈希值決定。

分區(qū)鍵和排序鍵 - 稱為復(fù)合主鍵,此類型的鍵由兩個(gè)屬性組成。第一個(gè)屬性是分區(qū)鍵,第二個(gè)屬性是排序鍵。

DynamoDB 使用分區(qū)鍵值作為對(duì)內(nèi)部哈希函數(shù)的輸入。來自哈希函數(shù)的輸出決定了項(xiàng)目將存儲(chǔ)到的分區(qū)(DynamoDB 內(nèi)部的物理存儲(chǔ))。具有相同分區(qū)鍵的所有項(xiàng)目按排序鍵值的排序順序存儲(chǔ)在一起。兩個(gè)項(xiàng)目可具有相同的分區(qū)鍵值,但這兩個(gè)項(xiàng)目必須具有不同的排序鍵值。

為將某個(gè)項(xiàng)目寫入表中,DynamoDB 會(huì)計(jì)算分區(qū)鍵的哈希值以確定該項(xiàng)目的存儲(chǔ)分區(qū)。在該分區(qū)中,可能有幾個(gè)具有相同分區(qū)鍵值的項(xiàng)目,因此 DynamoDB 會(huì)按排序鍵的升序?qū)⒃擁?xiàng)目存儲(chǔ)在其他項(xiàng)目中。

要讀取表中的某個(gè)項(xiàng)目,您必須為該項(xiàng)目指定分區(qū)鍵值和排序鍵值。DynamoDB 會(huì)計(jì)算分區(qū)鍵的哈希值,從而生成可從中找到該項(xiàng)目的分區(qū)。

如果我們查詢的項(xiàng)目具有相同的分區(qū)鍵值,則可以通過單一操作 (Query) 讀取表中的多個(gè)項(xiàng)目。DynamoDB 將返回具有該分區(qū)鍵值的所有項(xiàng)目。或者,也可以對(duì)排序鍵應(yīng)用某個(gè)條件,以便它僅返回特定值范圍內(nèi)的項(xiàng)目。

假設(shè) Pets 表具有由 AnimalType(分區(qū)鍵)和 Name(排序鍵)構(gòu)成的復(fù)合主鍵。

下圖顯示了 DynamoDB 寫入項(xiàng)目的過程,分區(qū)鍵值為 Dog、排序鍵值為 Fido。

為讀取 Pets 表中的同一項(xiàng)目,DynamoDB 會(huì)計(jì)算 Dog 的哈希值,從而生成這些項(xiàng)目的存儲(chǔ)分區(qū)。然后,DynamoDB 會(huì)掃描這些排序鍵屬性值,直至找到 Fido。

要讀取 AnimalType 為 Dog 的所有項(xiàng)目,您可以執(zhí)行 Query 操作,無需指定排序鍵條件。默認(rèn)情況下,這些項(xiàng)目會(huì)按存儲(chǔ)順序(即按排序鍵的升序)返回。或者,您也可以請(qǐng)求以降序返回。

要僅查詢某些 Dog 項(xiàng)目,您可以對(duì)排序鍵應(yīng)用條件(例如,僅限 Name 在 A 至 K 范圍內(nèi)的 Dog 項(xiàng)目)。

Note

每個(gè)主鍵屬性必須為標(biāo)量(表示它只能具有一個(gè)值)。主鍵屬性唯一允許的數(shù)據(jù)類型是字符串、數(shù)字和二進(jìn)制。對(duì)于其他非鍵屬性沒有任何此類限制。

DynamoDB 會(huì)自動(dòng)分配足夠的存儲(chǔ),每個(gè)分區(qū)鍵值的非重復(fù)排序鍵值無數(shù)量上限。所以即使需要在 Dog 表中存儲(chǔ)數(shù)十億 Pets項(xiàng)目,DynamoDB 也能這一需求。

二級(jí)索引

DynamoDB支持在一個(gè)表上創(chuàng)建一個(gè)或多個(gè)二級(jí)索引。利用 secondary index,除了可對(duì)主鍵進(jìn)行查詢外,還可使用替代鍵查詢表中的數(shù)據(jù)。

DynamoDB 支持兩種索引:

Global secondary index - 一種帶有可能與表中不同的分區(qū)鍵和排序鍵的索引。

Local secondary index - 一種分區(qū)鍵與表中的相同但排序鍵與表中的不同的索引。

最多可以為每個(gè)表定義 5 個(gè)全局二級(jí)索引和 5 個(gè)本地二級(jí)索引。

下圖顯示了示例 Music 表,該表包含一個(gè)名為 GenreAlbumTitle 的新索引

對(duì)于Music表,我們不僅可以按 Artist(分區(qū)鍵)或按 Artist 和 SongTitle(分區(qū)鍵和排序鍵)查詢數(shù)據(jù)項(xiàng)。還可以按 Genre 和 AlbumTitle 查詢數(shù)據(jù)。

Note

請(qǐng)注意有關(guān) GenreAlbumTitle 索引的以下內(nèi)容:

每個(gè)索引屬于一個(gè)表(稱為索引的基表)。在上述示例中,Music 是 GenreAlbumTitle 索引的基表。

DynamoDB 將自動(dòng)維護(hù)索引。當(dāng)添加、更新或刪除基表中的某個(gè)項(xiàng)目時(shí),DynamoDB 會(huì)添加、更新或刪除屬于該表的任何索引中的對(duì)應(yīng)項(xiàng)目。

當(dāng)創(chuàng)建索引時(shí),可指定哪些屬性將從基表復(fù)制或投影到索引。DynamoDB 至少會(huì)將鍵屬性從基表投影到索引中。對(duì)于 GenreAlbumTitle 也是如此,只不過此時(shí)只有 Music 表中的鍵屬性會(huì)投影到索引中。

DynamoDB 數(shù)據(jù)類型

DynamoDB 對(duì)表中的屬性支持很多不同的數(shù)據(jù)類型。可按以下方式為屬性分類:

標(biāo)量類型 - 標(biāo)量類型可準(zhǔn)確地表示一個(gè)值。標(biāo)量類型包括數(shù)字、字符串、二進(jìn)制、布爾值和 null。

文檔類型 - 文檔類型可表示具有嵌套屬性的復(fù)雜結(jié)構(gòu)。文檔類型包括列表和映射。

集類型 - 集類型可表示多個(gè)標(biāo)量值。集類型包括字符串集、數(shù)字集和二進(jìn)制集。

當(dāng)創(chuàng)建表或secondary index時(shí),必須指定每個(gè)主鍵屬性(分區(qū)鍵和排序鍵)的名稱和數(shù)據(jù)類型。此外,每個(gè)主鍵屬性必須定義為字符串、數(shù)字或二進(jìn)制類型。

標(biāo)量類型

標(biāo)量類型包括數(shù)字、字符串、二進(jìn)制、布爾值和 null。

數(shù)據(jù)類型 說明 示例
字符串 字符串是使用 UTF-8 二進(jìn)制編碼的 Unicode。字符串的長(zhǎng)度必須大于零且受限于最大 DynamoDB 項(xiàng)目大小 400 KB。 "Bicycle"
數(shù)字 數(shù)字可為正數(shù)、負(fù)數(shù)或零。數(shù)字最多可精確到 38 位 - 超過此位數(shù)將導(dǎo)致意外 300
二進(jìn)制 二進(jìn)制類型屬性可以存儲(chǔ)任意二進(jìn)制數(shù)據(jù),如壓縮文本、加密數(shù)據(jù)或圖像。DynamoDB 會(huì)在比較二進(jìn)制值時(shí)將二進(jìn)制數(shù)據(jù)的每個(gè)字節(jié)視為無符號(hào)。二進(jìn)制屬性的長(zhǎng)度必須大于零且受限于最大 DynamoDB 項(xiàng)目大小 400 KB。 這是一個(gè)采用 Base64 編碼文本的二進(jìn)制屬性: dGhpcyB0ZXh0IGlzIGJhc2U2NC1lbmNvZGVk
布爾值 布爾類型屬性可以存儲(chǔ) true 或 false。 true
空代表屬性具有未知或未定義狀態(tài)。 NULL
字符串

如果將主鍵屬性定義為字符串類型屬性,以下附加限制將適用:

對(duì)于簡(jiǎn)單的主鍵,第一個(gè)屬性值(分區(qū)鍵)的最大長(zhǎng)度為 2048 字節(jié)。

對(duì)于復(fù)合主鍵,第二個(gè)屬性值(排序鍵)的最大長(zhǎng)度為 1024 字節(jié)

DynamoDB 使用基礎(chǔ)的 UTF-8 字符串編碼字節(jié)整理和比較字符串。例如,“a”(0x61) 大于“A”(0x41),“?”(0xC2BF) 大于“z”(0x7A)。

可使用字符串?dāng)?shù)據(jù)類型表示日期或時(shí)間戳。執(zhí)行此操作的一種方法是使用 ISO 8601 字符串,如以下示例所示:

2016-02-15

2015-12-21T17:42:34Z

20150311T122706Z

也可以使用數(shù)字?jǐn)?shù)據(jù)類型表示日期或時(shí)間戳

數(shù)字

數(shù)字范圍

正數(shù)范圍:1E-130 到 9.9999999999999999999999999999999999999E+125

負(fù)數(shù)范圍:-9.9999999999999999999999999999999999999E+125 到 -1E-130

在 DynamoDB 中,數(shù)字以可變長(zhǎng)度形式表示。系統(tǒng)會(huì)刪減開頭和結(jié)尾的 0。

所有數(shù)字將作為字符串通過網(wǎng)絡(luò)發(fā)送到 DynamoDB,以最大程度地提高不同語(yǔ)言和庫(kù)之間的兼容性。但是,DynamoDB 會(huì)將它們視為數(shù)字類型屬性以方便數(shù)學(xué)運(yùn)算。

Note

如果數(shù)字精度十分重要,則應(yīng)使用從數(shù)字類型轉(zhuǎn)換的字符串將數(shù)字傳遞給 DynamoDB。

二進(jìn)制

如果將主鍵屬性定義為二進(jìn)制類型屬性,以下附加限制將適用:

對(duì)于簡(jiǎn)單的主鍵,第一個(gè)屬性值(分區(qū)鍵)的最大長(zhǎng)度為 2048 字節(jié)。

對(duì)于復(fù)合主鍵,第二個(gè)屬性值(排序鍵)的最大長(zhǎng)度為 1024 字節(jié)。

在將二進(jìn)制值發(fā)送到 DynamoDB 之前,我們必須采用 Base64 編碼格式對(duì)其進(jìn)行編碼。收到這些值后,DynamoDB 會(huì)將數(shù)據(jù)解碼為無符號(hào)字節(jié)數(shù)組,將其用作二進(jìn)制屬性的長(zhǎng)度。

文檔類型

文檔類型包括列表和映射。這些數(shù)據(jù)類型可以互相嵌套,用來表示深度最多為 32 層的復(fù)雜數(shù)據(jù)結(jié)構(gòu)。
只要包含值的項(xiàng)目大小在 DynamoDB 項(xiàng)目大小限制 (400 KB) 內(nèi),列表或映射中值的數(shù)量就沒有限制。

數(shù)據(jù)類型 說明 示例
列表 列表類型屬性可存儲(chǔ)值的有序集合。列表用方括號(hào)括起:[ ... ]。列表類似于 JSON 數(shù)組。列表元素中可以存儲(chǔ)的數(shù)據(jù)類型沒有限制,列表元素中的元素也不一定為相同類型。 FavoriteThings: ["Cookies", "Coffee", 3.14159]
映射 映射類型屬性可以存儲(chǔ)名稱/值對(duì)的無序集合。映射用大括號(hào)括起:{ ... }。映射類似于 JSON 對(duì)象。映射元素中可以存儲(chǔ)的數(shù)據(jù)類型沒有限制,映射中的元素也不一定為相同類型。 示例如下
{
    Day: "Monday",
    UnreadEmails: 42,
    ItemsOnMyDesk: [
        "Coffee Cup",
        "Telephone",
        {
            Pens: { Quantity : 3},
            Pencils: { Quantity : 2},
            Erasers: { Quantity : 1}
        }
    ]
}
Note

DynamoDB 讓您可以使用映射/列表中的單個(gè)元素

DynamoDB 支持表示數(shù)字、字符串或二進(jìn)制值集的類型。集中的所有元素必須為相同類型(

集中的每個(gè)值必須是唯一的。集中的值的順序不會(huì)保留。不支持空集。

Example (字符串集、數(shù)字集和二進(jìn)制集)

# 必須是相同的數(shù)據(jù)類型
# 字符串集
["Black", "Green" ,"Red"]
# 數(shù)字集
[42.2, -19, 7.5, 3.14]
# 二進(jìn)制集
["U3Vubnk=", "UmFpbnk=", "U25vd3k="]
DynamoDB API

DynamoDB 的api操作主要用于控制層面、數(shù)據(jù)層面和DynamoDB Streams。

控制層面

控制層面 操作可讓我們可以創(chuàng)建和管理DynamoDB表。它們還可讓我們可以使用依賴于表的索引、流和其他對(duì)象。

CreateTable - 創(chuàng)建新表。或者,也可以創(chuàng)建一個(gè)或多個(gè)二級(jí)索引并為表啟用 DynamoDB Streams。

DescribeTable - 返回有關(guān)表的信息,例如,表的主鍵架構(gòu)、吞吐量設(shè)置、索引信息等。

ListTables - 返回列表中所有表的名稱。

UpdateTable - 修改表或其索引的設(shè)置、創(chuàng)建或刪除表上的新索引或修改表的 DynamoDB Streams 設(shè)置。

DeleteTable - 從 DynamoDB 中刪除表及其所有依賴對(duì)象。

數(shù)據(jù)層面

數(shù)據(jù)層面操作可讓我們對(duì)表中的數(shù)據(jù)執(zhí)行創(chuàng)建、讀取、更新和刪除(也稱為 CRUD)操作。某些數(shù)據(jù)層面操作還可讓我們可以從secondary index中讀取數(shù)據(jù)。

創(chuàng)建數(shù)據(jù)

PutItem - 將單個(gè)項(xiàng)目寫入到表中。您必須指定主鍵屬性,但不必指定其他屬性。

BatchWriteItem - 將最多 25 個(gè)項(xiàng)目寫入到表中。

讀取數(shù)據(jù)

GetItem - 從表中檢索單個(gè)項(xiàng)目。我們必須為所需的項(xiàng)目指定主鍵。我們可以檢索整個(gè)項(xiàng)目,也可以僅檢索其屬性的子集。

BatchGetItem - 從一個(gè)或多個(gè)表中檢索最多 100 個(gè)項(xiàng)目。

Query - 檢索具有特定分區(qū)鍵的所有項(xiàng)目。我們必須指定分區(qū)鍵值。

可以檢索整個(gè)項(xiàng)目,也可以僅檢索其屬性的子集。或者,也可以對(duì)排序鍵值應(yīng)用條件,以便只檢索具有相同分區(qū)鍵的數(shù)據(jù)子集。我們可以對(duì)表使用此操作,前提是該表同時(shí)具有分區(qū)鍵和排序鍵。還可以對(duì)索引使用此操作,前提是該索引同時(shí)具有分區(qū)鍵和排序鍵。

Scan - 檢索指定表或索引中的所有項(xiàng)目。我們可以檢索整個(gè)項(xiàng)目,也可以僅檢索其屬性的子集。或者,我們也可以應(yīng)用篩選條件以僅返回感興趣的值并放棄剩余的值。

更新數(shù)據(jù)

UpdateItem - 修改項(xiàng)目中的一個(gè)或多個(gè)屬性。必須為要修改的項(xiàng)目指定主鍵。

可以添加新屬性以及修改或刪除現(xiàn)有屬性。還可以執(zhí)行有條件更新。也可以實(shí)施一個(gè)原子計(jì)數(shù)器,該計(jì)數(shù)器可在不干預(yù)其他寫入請(qǐng)求的情況下遞增或遞減數(shù)字屬性。

刪除數(shù)據(jù)

DeleteItem - 從表中刪除單個(gè)項(xiàng)目。您必須為要?jiǎng)h除的項(xiàng)目指定主鍵。

BatchWriteItem - 從一個(gè)或多個(gè)表中刪除最多 25 個(gè)項(xiàng)目

Note

Batch 操作比調(diào)用多次單個(gè)請(qǐng)求(DeleteItem, GetItem, PutItem)更有效,因?yàn)橹刃蛞粋€(gè)網(wǎng)絡(luò)請(qǐng)求即可操作多個(gè)項(xiàng)目。

DynamoDB Streams

DynamoDB Streams 操作可對(duì)表啟用或禁用流,并能允許對(duì)包含在流中的數(shù)據(jù)修改記錄的訪問。

ListStreams - 返回所有流的列表,或僅返回特定表的流。

DescribeStream - 返回有關(guān)流的信息,例如,流的 Amazon 資源名稱 (ARN) 和您的應(yīng)用程序可開始讀取前幾條流記錄的位置。

GetShardIterator - 返回一個(gè)分區(qū)迭代器,這是我們的應(yīng)用程序用來從流中檢索記錄的數(shù)據(jù)結(jié)構(gòu)。

GetRecords - 使用給定分區(qū)迭代器檢索一條或多條流記錄。

命名規(guī)則

DynamoDB 中的表、屬性和其他對(duì)象必須具有名稱。名稱應(yīng)該簡(jiǎn)明扼要 - 例如,Products、Books 和 Authors 之類的名稱是都是不言而喻的。

下面是 DynamoDB 的命名規(guī)則:

所有名稱都必須使用 UTF-8 進(jìn)行編碼,并且區(qū)分大小寫。

表名稱和索引名稱的長(zhǎng)度必須介于 3 到 255 個(gè)字符之間,而且只能包含以下字符:

a-z

A-Z

0-9

_(下劃線)

-(短劃線)

.(圓點(diǎn))

屬性名稱的長(zhǎng)度必須介于 1 到 255 個(gè)字符之間。

保留關(guān)鍵字和特殊字符

與很多其他數(shù)據(jù)庫(kù)管理系統(tǒng)相似,DynamoDB 也具有一系列保留關(guān)鍵字和特殊字符。

有關(guān) DynamoDB 中的保留關(guān)鍵字的完整列表,請(qǐng)參閱 DynamoDB 中的保留關(guān)鍵字。

(哈希)和 :(冒號(hào))在 DynamoDB 中具有特殊含義

DynamoDB允許使用這些關(guān)鍵字和特殊符號(hào)用于命名,但我們不建議這么做

有關(guān)更多信息,請(qǐng)參閱 為屬性名稱和值使用占位符。

讀取一致性

Amazon DynamoDB 在全世界多個(gè) AWS 區(qū)域可用。每個(gè)區(qū)域均與其他 AWS 區(qū)域完全獨(dú)立和隔離。

例如,如果我們?cè)?us-east-1 區(qū)域有一個(gè)名為 People 的表,并在 us-west-2 區(qū)域有另一個(gè)名為 People 的表,則這兩個(gè)表將被視為完全獨(dú)立的表。

每個(gè) AWS 區(qū)域包含多個(gè)不同的稱為“可用區(qū)”的位置。每個(gè)可用區(qū)都被設(shè)計(jì)成不受其他可用區(qū)故障的影響,并提供低價(jià)、低延遲的網(wǎng)絡(luò)連接,以連接到同一區(qū)域其他可用區(qū)。此設(shè)計(jì)可保證我們可以在某個(gè)區(qū)域的多個(gè)可用區(qū)中快速?gòu)?fù)制數(shù)據(jù)。

當(dāng)我們將某個(gè)數(shù)據(jù)寫入 DynamoDB 表并收到 HTTP 200 響應(yīng) (OK) 時(shí),該數(shù)據(jù)的所有副本都會(huì)更新。但是,要將數(shù)據(jù)傳播到當(dāng)前 AWS 區(qū)域內(nèi)的所有存儲(chǔ)位置需要耗費(fèi)一定的時(shí)間。該數(shù)據(jù)最終將在上述所有存儲(chǔ)位置中保持一致,通常只需一秒或更短時(shí)間。

為了支持各種應(yīng)用程序要求,DynamoDB 同時(shí)支持最終一致性 讀取和強(qiáng)一致性 讀取。

最終一致性讀取

當(dāng)我們從 DynamoDB 表中讀取數(shù)據(jù)時(shí),返回的可能不是剛剛完成的寫入操作的結(jié)果。響應(yīng)可能包含某些舊的數(shù)據(jù)。但是,如果我們?cè)诙虝r(shí)間后重復(fù)讀取請(qǐng)求,響應(yīng)將返回最新的數(shù)據(jù)。

強(qiáng)一致性讀取

當(dāng)我們請(qǐng)求強(qiáng)一致性讀取時(shí),DynamoDB 會(huì)返回具有最新數(shù)據(jù)的響應(yīng),從而反映來自所有已成功的之前寫入操作的更新。但是,如果網(wǎng)絡(luò)延遲或中斷,可能會(huì)無法執(zhí)行強(qiáng)一致性讀取

Note

DynamoDB 默認(rèn)使用最終一致性讀取。讀取操作(例如 GetItem、Query 和 Scan)提供了一個(gè) ConsistentRead 參數(shù):此參數(shù)設(shè)置為 true,DynamoDB 將在操作過程中使用強(qiáng)一致性讀取。

示例:

{
    TableName: "Music",
    Key: {
        "Artist": "No One You Know",
        "SongTitle": "Call Me Today"
    },
    ConsistentRead: true
}
python 示例
table = db3.Table("Music")
response = table.get_item(
    Key={
        "Artist": "The Acme Band",
        "SongTitle": "Still In Love"
    },
    ConsistentRead=True
)

下一篇主要介紹DynamoDB表的基本操作

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/17587.html

相關(guān)文章

  • Amazon DynamoDB 入門2工作原理API數(shù)據(jù)類型介紹

    摘要:使用此值作為其哈希函數(shù)的輸入值,從而生成可從中找到該項(xiàng)目的分區(qū)。在這種情況下,會(huì)根據(jù)字符串的哈希值,使用其哈希函數(shù)決定新項(xiàng)目的存儲(chǔ)位置。使用分區(qū)鍵值作為對(duì)內(nèi)部哈希函數(shù)的輸入。可使用字符串?dāng)?shù)據(jù)類型表示日期或時(shí)間戳。 本節(jié)主要介紹DynamoDB 基本概念、核心組件、數(shù)據(jù)結(jié)構(gòu)、Api DynamoDB 基本概念 DynamoDB 是 AWS 獨(dú)有的完全托管的 NoSQL Database。...

    baoxl 評(píng)論0 收藏0
  • Amazon DynamoDB 入門3: 表的基本操作

    摘要:基本的操作包括表操作項(xiàng)目操作和索引管理。將立即執(zhí)行請(qǐng)求。返回一個(gè)包含操作結(jié)果的響應(yīng)。表是關(guān)系數(shù)據(jù)庫(kù)和中的基本數(shù)據(jù)結(jié)構(gòu)。每秒需對(duì)此表執(zhí)行的讀取和寫入次數(shù)。 Amazon DynamoDB 表的基本操作 之前兩篇文章介紹了DynamoDB如何在本地安裝以及基本的工作原理和API,這一節(jié)主要介紹如何使用DynamoDB。 基本的DynamoDB 操作包括表操作、項(xiàng)目操作和索引管理。 首先是鏈...

    Anshiii 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<