本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 Amazon DynamoDB 中的分割區索引鍵空間分配寫入的一個好方法是拓展空間。您可以數種不同的方式來執行此動作:您可以在分割區索引鍵值中新增隨機數字,以便在分割區之間分配項目。或者,您可以使用根據您查詢內容計算的數字。
使用隨機尾碼的碎片
要在分割區索引鍵空間中更平均地分佈負載的方法,即是在分割區索引鍵值的結尾新增一個亂數。如此您就能在較大的空間中將寫入隨機化。
例如,對於代表今天日期的分割區索引鍵,您可以選擇 1
到 200
間的一個亂數,並將其串連到日期做為尾碼。這會產生分割區索引鍵值,例如 2014-07-09.1
、2014-07-09.2
... 到 2014-07-09.200
。因為您隨機化了分割區索引鍵,每天對資料表的寫入會平均分配在多個分割區中。這可帶來更優良的平行處理與更高的整體傳輸量。
然而,若要讀取指定日期的所有項目,您需要查詢所有尾碼的項目,接著合併結果。例如,您會先對分割區索引鍵值 2014-07-09.1
發出 Query
請求。再對 2014-07-09.2
發出另一個 Query
,依此類推直到 2014-07-09.200
。最後,您的應用程式需要合併所有該等 Query
請求的結果。
使用計算尾碼的碎片
隨機化的策略可大幅改善寫入傳輸量。由於您不知道寫入項目時所使用的尾碼值,因此很難讀取特定項目。若要讓讀取個別項目變得比較容易,您可以使用不同的策略。不使用亂數以在分割區中分佈項目,而是使用您可以計算的數字 (根據您想要查詢之項目)。
考量先前的範例,其中資料表會使用分割區索引鍵中的今天日期。現在假設每個項目有可存取的 OrderId
屬性,且您經常需要依訂單 ID (除了日期) 來尋找項目。在您的應用程式將項目寫入資料表之前,可根據訂單 ID 計算雜湊尾碼並將其附加至分割區索引鍵日期。計算應會產生介於 1 到 200 之間的數字,此分佈非常平均,與隨機策略產生的結果相當類似。
簡單計算可能就足夠了,例如 UTF-8 程式碼點值的乘積,其字元順序 ID、模數 200、+ 1。分割區索引鍵值會是與計算結果串聯的日期。
有了這項策略,即可在分割區索引鍵值之間,以及實體分割區之間平均分配寫入。您可以輕鬆地對特定項目與日期執行 GetItem
操作,因為您可以計算對特定 OrderId
值的分割區索引鍵值。
若要讀取指定日期的所有項目,您仍然需要 Query
每個 2014-07-09.N
索引鍵 (其中 N
是 1-200),而且您的應用程式需要合併所有結果。好處是您能避免讓單一「經常性」分割區索引鍵值承受所有工作負載。
注意
如需為了處理大量時間序列資料而設計的有效策略,請參閱 時間序列資料。