資料建模是設計應用程式如何將資料存放在指定資料庫中的程序。資料建模使用 NoSQL 資料庫 (如 DynamoDB),與使用關聯式資料庫建模的程序不同。關聯式資料庫的建置旨在彈性,非常適合分析應用程式。在關聯式資料建模中,先從您的實體開始。具有標準化關聯式模型時,您可以滿足您的應用程式中所需的任何查詢模式。
NoSQL (非關聯式) 資料庫的設計旨在速度和規模,而不是彈性。雖然關聯式資料庫的效能可能隨著您向上擴展而降級,但是水平擴展資料庫 (如 DynamoDB) 在任何規模都提供了一致的效能。一些 DynamoDB 使用者的資料表大於 100 TB,其資料表的讀取和寫入效能與資料表大小小於 1 GB 時的效能相同。
若要使用 NoSQL 資料庫 (如 DynamoDB) 取得最佳結果,需要轉變典型關聯式資料庫的想法。在透過 DynamoDB 對資料建模時,使用以下最佳實務。
1.專注於存取模式
執行任何類型的資料建模時,先從實體關係圖開始,以說明應用程式中的不同物件 (或實體) 以及它們的連接方式 (或您的實體之間的關係)。
在關聯式資料庫中,將您的實體直接放到資料表中,並使用外部索引鍵指定關係。在您定義資料表後,關聯式資料庫會提供彈性查詢語言,從而以您所需的形狀傳回資料。
在 DynamoDB 中,在對您的資料表建模之前思考存取模式。NoSQL 資料庫專注於速度,而不是彈性。先了解您存取資料的方式,然後以將存取資料的形狀對資料建模。
在設計您的 DynamoDB 資料表之前,記錄您用於在應用程式中讀取和寫入資料的所有需求。請仔細想想應用程式中的所有流程,因為您要根據存取模式最佳化您的資料表。
2.最佳化對 DynamoDB 的請求數
在記錄您應用程式的存取模式需求後,您已準備好設計您的資料表。您應設計您的資料表,根據每個存取模式最大限度地減少對 DynamoDB 的請求數。理想情況下,每個存取模式僅需要對 DynamoDB 請求一次,因為網路請求較慢,這限制了您將在應用程式中提出的網路請求數。
若要最佳化對 DynamoDB 的請求數,您需要了解一些核心概念:
3.不要假裝關聯式模型
DynamoDB 的新手往往會嘗試在非關聯式 DynamoDB 上實作關聯式模型。如果您嘗試這樣做,會失去 DynamoDB 的大部分優勢。
人們使用 DynamoDB 嘗試的最常見反面模式 (重複出現的問題的無效回應):
- 標準化:在關聯式資料庫中,您標準化您的資料來減少資料冗餘和儲存空間,然後使用聯結來合併多個不同的資料表。但是,大規模聯結比較慢且昂貴。DynamoDB 不允許聯結,因為其速度會隨著資料表的增長而變慢。
- 每個表格一種資料類型:您的 DynamoDB 資料表通常會將不同類型的資料包括在單一表格中。在我們的範例中,我們將 User、Game 和 UserGameMapping 實體放在單一資料表中。在關聯式資料庫中,會將它作為三個不同的資料表進行建模。
- 太多次要索引:人們通常嘗試為所需的每個額外存取模式建立次要索引。DynamoDB 無結構描述,這亦適用於您的索引。在您的屬性中使用此彈性,以跨您資料表中的多個資料類型重複使用單一次要索引。這稱為索引過載。
在下面的步驟中,我們將建置實體關係圖並預先制定存取模式。使用 DynamoDB 時,這些操作應始終是首要步驟。然後,在接下來的單元中,我們在資料表設計中實作這些存取模式。
完成單元的時間:20 分鐘