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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

根據(jù) GSI 索引和范圍鍵從 Dynamo 數(shù)據(jù)庫中獲取所有列

根據(jù) GSI 索引和范圍鍵從 Dynamo 數(shù)據(jù)庫中獲取所有列

幕布斯7119047 2023-03-17 10:26:17
我只有兩個(gè)在 dynamo db GSI 索引級別定義的投影。但要?jiǎng)?chuàng)建預(yù)期的響應(yīng),我還需要從 dynamo db 獲取其他列。假設(shè)我的表中有 20 列,全局二級索引中只提到了兩列。我如何使用 GSI 和從主表加載數(shù)據(jù)來實(shí)現(xiàn)這一點(diǎn)。我是否需要用戶查詢請求或我想到的另一種方法是從索引中提取數(shù)據(jù)然后在主表上搜索。這是我現(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í)岢鰧?shí)現(xiàn)這一目標(biāo)的最佳方法。
查看完整描述

1 回答

?
慕姐4208626

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超7個(gè)贊

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

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

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


查看完整回答
反對 回復(fù) 2023-03-17
  • 1 回答
  • 0 關(guān)注
  • 133 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號