第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據 GSI 索引和范圍鍵從 Dynamo 數據庫中獲取所有列

根據 GSI 索引和范圍鍵從 Dynamo 數據庫中獲取所有列

幕布斯7119047 2023-03-17 10:26:17
我只有兩個在 dynamo db GSI 索引級別定義的投影。但要創(chuàng)建預期的響應,我還需要從 dynamo db 獲取其他列。假設我的表中有 20 列,全局二級索引中只提到了兩列。我如何使用 GSI 和從主表加載數據來實現(xiàn)這一點。我是否需要用戶查詢請求或我想到的另一種方法是從索引中提取數據然后在主表上搜索。這是我現(xiàn)有的代碼:    public List<DynamoDBObject> getData(String gsiHashKey) {        DynamoDBObject dynamoDBObject= new DynamoDBObject();        command.setgsiHashKey(gsiHashKey);     final DynamoDBQueryExpression<DynamoDBObject> queryExpression = new DynamoDBQueryExpression<>();  queryExpression.setIndexName("gsi_index_name");      queryExpression.setHashKeyValues(dynamoDBObject);return mapper.query(DynamoDBObject.class,queryExpression)}請?zhí)岢鰧崿F(xiàn)這一目標的最佳方法。
查看完整描述

1 回答

?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

如您所述,在 GSI 中,如果您選擇不將所有基表的列投影到索引表中,則在查詢索引時這些其他列不可用。這樣做的原因不是實施者懶惰,而是效率:在 GSI 中,索引表以與基表不同的方式分布在整個 DynamoDB 集群中,因此在讀取索引表數據時,沒有有效的方法也可以讀取同時從基表。順便說一下,這正是 LSI 與 GSI 的不同之處 - 在 LSI 中,索引和基表位于同一位置,并且可以一起讀取,因此 DynamoDB 確實為您提供了一種方法來請求未投影的列。

所以我認為你有兩個選擇。一種是BatchGetItem在讀取完索引數據后,再請求讀取基表數據。請注意,當您查詢索引時,您始終可以取回基表鍵屬性,因此您可以使用這些屬性從基表中讀取完整的項目。BatchGetItem可能是進行這些讀取的最有效方法,而不是使用GetItem.

當然,第二個選項是將更多基本屬性(甚至全部)投影到索引表中。這會增加你的存儲和可能的讀寫成本,所以你是否要這樣做取決于你的應用程序。在某些特定情況下,具有相同屬性的兩個索引甚至具有不同數量的投影屬性也是有意義的。


查看完整回答
反對 回復 2023-03-17
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號