簡體   English   中英

使用密鑰的 substring (begins_with) 在 DynamoDb 中查詢 GSI

[英]Query GSI in DynamoDb with a substring of the key (begins_with)

下面以DynamoDb官方文檔sort keys的最佳實踐為例: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-sort-keys.html

想象一下,我們有一個像文檔中提到的表,其中我們的排序鍵是一個組合,如下所示:

[country]#[region]#[city]#[neighborhood]

例如,像這樣:

分區鍵(員工姓名) 排序鍵 其他專欄...
安東尼奧 西班牙#馬德里#赫塔菲#隨便 ...
瑪麗亞 西班牙#安達盧西亞#塞維利亞#Whatever2 ...
麥克風 西班牙#Madrid#Alcorcon#Whatever ...

我想獲取特定國家/地區的所有記錄,因此我們有一個部分排序鍵:

[country]#[region]Spain#Madrid一樣得到AntonioMike

我知道不可能直接通過排序鍵查詢,所以我創建了一個帶有倒排索引的 GSI(就像這里提到的https://stackoverflow.com/a/64141405

分區鍵 排序鍵 其他專欄...
西班牙#馬德里#赫塔菲#隨便 安東尼奧 ...
西班牙#安達盧西亞#塞維利亞#Whatever2 瑪麗亞 ...
西班牙#Madrid#Alcorcon#Whatever 麥克風 ...

但看起來仍然無法使用begins_with運算符進行查詢。

var request = new QueryRequest
{
    IndexName = "GSI_Name",
    KeyConditionExpression = "begins_with(SortKey, :v_SortKey)",
    ExpressionAttributeValues = new Dictionary<string, AttributeValue> {
        {":v_SortKey", new AttributeValue { S = sortKey }},
    },
};

我的問題是:有沒有辦法在不使用不理想的Scan操作的情況下實現這一目標? 或任何更改我的表定義以實現此目的的建議? 我一直在想辦法重組表以完成此行為,但我對 DynamoDB 不夠流利。

使用國家作為 PK,rest 作為 SK。 這可以很好地跨分區分布數據,同時還支持您的訪問模式。

暫無
暫無

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

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