本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
DynamoDB 概觀
Amazon DynamoDB 是無SQL索引鍵值和文件資料庫,可提供快速且可預測的效能和無縫的可擴展性。它是一個完全受管、多區域、多活動和耐用的資料庫。(DynamoDB 中的全域資料表功能會自動將一個 AWS 區域中的修改同步至所有其他選取的區域,以提供多活動支援。) DynamoDB 具有內建的安全功能、備份和還原選項,以及適用於網際網路規模應用程式的記憶體內快取。
無SQL資料庫的無結構描述性質有助於減少將資料庫 (讀取結構描述) 變更推送至生產所需的時間和程序,進而實現快速應用程式開發 (RAD)。SQL DynamoDB 等資料庫不會建置用於高效能讀取/寫入操作。
功能和優勢
DynamoDB 提供下列功能和優點:
-
沒有要管理的伺服器 – DynamoDB 是完全受管的無SQL資料庫服務,這表示它不涉及任何伺服器維護開銷。
-
無結構描述 – DynamoDB 支援快速應用程式開發和部署。
-
大規模效能 – DynamoDB 提供快速且可預測的效能,以及無縫的可擴展性。
-
ACID 支援 – DynamoDB 支援原子性、一致性、隔離和耐久性 (ACID) 交易,協助您維持資料正確性。
-
高可用性和耐久性 – 您的資料存放在固態磁碟 (SSDs) 上,並自動複寫到 AWS 區域中的多個可用區域,提供內建的高可用性和資料耐久性。
-
自動擴展 – DynamoDB 使用 AWS Application Auto Scaling 服務動態調整佈建的輸送量,以回應流量模式。
-
彈性定價選項 – DynamoDB 提供兩種容量模式,具有特定計費選項:隨需容量模式和佈建容量模式。
-
Point-in-time 復原 – 您可以使用復原功能 point-in-time啟用連續備份,以協助保護您的資料表免於意外寫入或刪除操作,並將資料表還原至過去 35 天內的任何時間點。
-
存留時間 (TTL) – 您可以在指定持續時間後,自動從 DynamoDB 資料表刪除項目。
-
全域資料表 – 您可以在 AWS 區域之間部署多個複本,而不必建置自己的複寫解決方案。
-
全域次要索引 – 您可以使用分割區和排序索引鍵來查詢 DynamoDB 資料表,這些索引鍵與資料表本身的分割區和排序索引鍵不同。
-
DAX – DynamoDB Accelerator (DAX) 快取服務為讀取操作提供毫秒以下的回應時間。
-
DynamoDB Streams – 此功能提供日誌中項目層級修改的時間順序,以支援 DynamoDB 資料表變更的即時追蹤和通知。
如需這些優點的詳細資訊,請參閱 AWS 網站上的 Amazon DynamoDB 功能
分割區索引鍵
DynamoDB 無結構描述,因此不需要定義資料表的所有屬性。分割區金鑰屬性為必要項目,排序金鑰為選用項目。其餘屬性都是任意的,而且每個項目可能有所不同。我們建議您選擇具有高基數的分割區金鑰,以便經常存取的項目不會位於相同的分割區上。此做法可協助您避免資料存取不平衡和熱分割區。如需詳細資訊,請參閱 DynamoDB 文件中的有效設計和使用分割區金鑰的最佳實務。
索引
索引可讓您存取替代查詢模式,並加快查詢速度。無論您使用的是關聯式資料庫還是 DynamoDB ,都應該謹慎建立索引。每當寫入操作發生在資料表上時,都必須更新該資料表的所有索引。
全域次要索引包含從基礎資料表中選取的屬性,但它們由與資料表本身的主要索引鍵不同的主索引鍵組織。在 DynamoDB 中,全域次要索引預設為稀疏。也就是說,排序索引鍵是選用的,不會出現在每個資料表項目中。若要利用此功能,您可以建立僅存放和投影所需屬性的全域次要索引。DynamoDB 資料表上最多可以有 20 個全域次要索引。如需此功能的詳細資訊,請參閱 DynamoDB 文件中的在 DynamoDB 中使用全域次要索引。 DynamoDB
存留時間
您可以在 DynamoDB 資料表上設定存留時間 (TTL) 屬性,以定義每個項目 (記錄) 時間戳記,以指定項目何時不再需要。在指定的時間戳記之後不久,DynamoDB 會從資料表中刪除項目,而不會消耗任何額外的容量單位。如需此功能的詳細資訊,請參閱 DynamoDB 文件中的使用 DynamoDB 存留時間將項目過期。 DynamoDB
定價模型
DynamoDB 提供兩種定價模型供您選擇:佈建容量和隨需容量。您選擇的定價模型取決於您的預測工作負載。
定價模型 | 工作負載類型 | 成本 | 讀取/寫入輸送量 |
---|---|---|---|
佈建的容量 | 可預測 | 較低 | 您可以指定讀取容量單位 (RCUs) 和寫入容量單位 () 的每秒讀取/寫入操作數量WCUs。例如:
您可以啟用自動擴展來調整容量以回應流量變更。 |
隨需容量 | 動態 | 較高 | 您未指定輸送量需求。DynamoDB 會自動容納您的工作負載。 您需要為應用程式在資料表上執行的讀取和寫入支付讀取請求單位和寫入請求單位的費用。例如:
|
如需這兩種模型的詳細資訊,請參閱 DynamoDB 文件中的讀取/寫入容量模式。
交易
DynamoDB 支援單一 AWS 帳戶和 AWS 區域中一或多個資料表的原子性、一致性、隔離和耐久性 (ACID) 交易。
若要管理資料表內和資料表間多個項目的變更,您可以使用 DynamoDB 交易 TransactWriteItems
和 TransactGetItems
APIs。
-
TransactWriteItems
是一種批次操作,其中包含具有一或多個UpdateItem
、PutItem
和DeleteItem
動作的寫入集。TransactWriteItems
可以選擇性地檢查在進行更新之前必須滿足的先決條件條件。這些條件可能涉及與寫入集中相同的項目,或不同的項目。如果不符合任何條件,交易會遭到拒絕。 -
TransactGetItems
是一種批次操作,其中包含具有一或多個GetItem
動作的讀取集。如果您對屬於作用中寫入交易的項目發出TransactGetItems
請求,則讀取交易會取消。若要取得先前遞交的值,您可以使用標準讀取操作。
如需這些 的詳細資訊APIs,請參閱 DynamoDB 文件中的 Amazon DynamoDB 交易:其運作方式。 DynamoDB
限制
DynamoDB 交易API操作具有下列限制條件:
-
交易無法更新超過 100 個唯一項目。
-
一個交易不能包含超過 4 MB 的資料。
-
交易中的任何兩個動作皆無法對相同資料表中的相同項目進行操作。例如,您無法在一筆交易中同時對相同項目執行
ConditionCheck
和Update
動作。 -
交易無法在多個 AWS 帳戶或區域中的資料表上操作。
-
交易操作僅在原始執行寫入操作的 AWS 區域中提供ACID保證。全域資料表不支援跨區域交易。
-
物件持久性模型不支援交易。若要使用交易功能,您必須使用 DynamoDB 低階 API存取資料庫和資料表。
大型元件
DynamoDB 每個項目的大小限制為 400 KB。此限制同時包含屬性名稱 (具有 UTF-8 編碼的二進位長度) 和屬性值 (再次包含二進位長度)。屬性名稱會計入大小限制。例如,請考慮具有兩個屬性的項目:一個名為 "country-code" 且值為 "IN" 的屬性和另一個名為 "country-phone-prefix" 且值為 "91" 的屬性。該項目的總大小為 36 個位元組。
因應措施
如果項目與許多屬性和屬性或大量資料相關聯,其大小可能會超過 400 KB。在此情況下,您可以將序列化項目以 JSON 格式存放在 Amazon Simple Storage Service (Amazon S3) 中,並將 Amazon S3 位置儲存為項目中的屬性 (S3Location
)。該項目的讀取和寫入操作會擷取 S3 物件並更新JSON字串。主索引鍵、排序索引鍵和本機索引和全域次要索引使用的所有屬性,應與 S3Location
屬性一起存放在資料表中。這需要應用程式 (資料存取層) 中的其他邏輯來檢查S3Location
屬性,並從 Amazon S3 擷取完整的項目資料。
備份和還原
備份和還原支援是任何資料庫中常見的功能期望。DynamoDB 原生支援相同帳戶中的備份和還原操作,但您可以使用其他選項或程序跨多個帳戶執行資料表複製。這些程序不會消耗任何讀取/寫入容量單位。如需詳細資訊,請參閱 AWS Prescriptive Guidance 網站上的 Amazon DynamoDB 跨帳戶完整資料表複製選項指南。
限制
DynamoDB 目前支援使用 進行跨帳戶備份和還原AWS Backup,但帳戶必須屬於同一組織。您可以採用下列其中一個解決方案來解決此限制:
-
使用 以您選擇的程式設計語言 (例如 .、NETJava 或 Python) 自訂實作AWS SDK。您可以從帳戶 A 中的來源資料表掃描項目,並將項目 (
BatchWrite
) 寫入帳戶 B 中的資料表。您可以在伺服器、內部部署電腦或 AWS Lambda (如果資料庫很小,且指令碼執行時間不到 15 分鐘) 上執行此程式碼。如需詳細資訊,請參閱 AWS 規範指南網站上的使用自訂實作跨帳戶複製 Amazon DynamoDB 資料表的模式。 -
使用 AWS Glue。如需此選項的相關資訊,請參閱 AWS 規範指南網站上的 Amazon DynamoDB 跨帳戶完整資料表複製選項指南。
語言和SDK支援
為 、JavaNET、Node.js JavaScript、Python、 和 Ruby AWS 的服務PHP和支援AWS SDKs提供簡化的程式設計介面。
您可以選擇三種模式,使用 AWS SDK: 物件持久性模型 (高階介面)、文件介面和低階介面來存取 DynamoDB 資料表。如需詳細資訊,請參閱本指南稍後的存取模式。