全局二級索
Global Secondary Indexes 引包含從基表中選擇的一組屬性,但是這些屬性按與表主鍵不同的主鍵進行排列。其分區鍵和排序鍵可以與基表上的分區鍵和排序鍵不同的索引。全局二級索引被視為“全局”,是因為對索引執行的查詢可以跨基表中所有分區的所有數據。
本地二級索引
local secondary index 為給定分區鍵值維護一個替代排序鍵。local secondary index還包含其基表中部分或所有屬性的副本;您可以在創建表時指定要投影到local secondary index中的屬性。local secondary index中的數據通過與基表相同的分區鍵來組織,但使用不同的排序鍵。
分區鍵與基表相同、但排序鍵不同的索引。local secondary index的含義是“本地”,表示local secondary index的每個分區的范圍都將限定為具有相同分區鍵值的基表分區。
為獲得最大查詢靈活性,您可以為每個表創建多達 20 個全局二級索引(默認限制)和多達 5 個local secondary index。
全局二級索引與local secondary index的主要差異:
特征 | 全局二級索引 | 本地二級索引 |
---|---|---|
鍵架構 | 全局二級索引的主鍵可以是簡單主鍵(分區鍵)或復合主鍵(分區鍵和排序鍵)。 | local secondary index的主鍵必須是復合主鍵(分區鍵和排序鍵)。 |
鍵屬性 | 索引分區鍵和排序鍵 (如果有) 可以是字符串、數字或二進制類型的任何基表屬性。 | 索引的分區鍵是與基表的分區鍵相同的屬性。排序鍵可以是字符串、數字或二進制類型的任何基表屬性。 |
每個分區鍵值的大小限制 | 全局二級索引沒有大小限制。 | 對於每個分區鍵值,所有索引項目的大小總和必須為 10GB 或更小。 |
在線索引操作 | 您可以在創建表時創建Global secondary index。您也可以向現有表添加新全局二級索引,或者刪除現有全局二級索引。有關更多信息,請參閱管理全局二級索引。 | 本地二級索引是在創建表的同時創建的。您不能向現有表添加local secondary index,也不能刪除已存在的任何local secondary index。 |
查詢和分區 | 通過全局二級索引,可以跨所有分區查詢整個表。 | 借助local secondary index,您可以對查詢中分區鍵值指定的單個分區進行查詢。 |
讀取一致性 | 對全局二級索引進行的查詢僅支持最終一致性。 | 查詢local secondary index時,您可以選擇最終一致性或強一致性。 |
預置吞吐量使用 | 每個全局二級索引都有自己的用於讀取和寫入活動的預置吞吐量設置。對全局二級索引執行的查詢或掃描會占用索引 (而非基表) 的容量單位。全局二級索引更新也是如此,因為會進行表寫入。 | 對local secondary index執行的查詢或掃描會占用基表的讀取容量單位。向表寫入時,其local secondary index也會更新;這些更新會占用基表的寫入容量單位。 |
投影屬性 | 對於全局二級索引查詢或掃描,您只能請求投影到索引的屬性。DynamoDB 不會從表中獲取任何屬性。 | 如果您查詢或掃描local secondary index,則可以請求未投影到索引的屬性。DynamoDB 會自動從表中獲取這些屬性。 |