[英]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
一樣得到Antonio
和Mike
。
我知道不可能直接通過排序鍵查詢,所以我創建了一個帶有倒排索引的 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.