簡體   English   中英

如果始終需要密鑰,如何創建稀疏索引?

[英]How can I make a sparse index if the key is always required?

我對DynamoDB中的某些東西感到非常困惑:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForLSI.html#GuidelinesForLSI.SparseIndexes

對於表中的任何項目,DynamoDB僅在項目中存在索引排序鍵值的情況下才會寫入相應的索引條目。 如果排序鍵未出現在每個表項中,則該索引被認為是稀疏的。

[...]

要跟蹤未結訂單,您可以在CustomerId(分區鍵)和IsOpen(排序鍵)上創建索引。 只有定義了IsOpen的表中的那些訂單才會顯示在索引中。

但是,如果您有一個用備用排序鍵定義的LSI,則在創建新項目時,該備用排序鍵永遠不能為空。 因此,索引一點也不稀疏,因為我創建的每個項目都會出現在索引中。

我想念什么?

所以我終於想通了。 我應該澄清我正在使用AWS控制台。

我使用分區鍵Gpart和排序鍵Gsort創建了一個GSI作為測試。 我注意到當我創建一個新項目時,這些字段會自動添加,並且我不能將它們留空,這就是我遇到的問題。 (我將收到錯誤消息“一個或多個參數值無效:AttributeValue可能不包含空字符串”)

在此處輸入圖片說明

原來,我所需要做的只是刪除這些字段。

在此處輸入圖片說明

刪除任何與GSI或LSI相關的屬性后,我可以保存該項目,並且可以肯定的是,這些索引僅顯示那些鍵所在的項目。

表的排序鍵不能為null。 您在LSI中使用的字段可以為空。

首要的關鍵

必須具有哈希鍵,並且可以選擇具有排序鍵。 主鍵必須是唯一的。

全球二級指數

必須具有哈希鍵,並且可以選擇具有排序鍵。 GSI獨立於主鍵索引。

本地二級指數

用於為現有索引提供替代的排序鍵。 根據定義,現有索引必須已經具有唯一鍵,因此LSI不需要具有值,因此允許使用NULL值。

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/LSI.html

在DynamoDB表中,每個項目的組合分區鍵值和排序鍵值必須唯一。 但是,在本地二級索引中,對於給定的分區鍵值,排序鍵值不需要唯一。 如果本地二級索引中有多個具有相同排序鍵值的項目,則Query操作將返回所有具有相同分區鍵值的項目。 在響應中,不按任何特定順序返回匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM