簡體   English   中英

如何基於多個(一個主要)屬性 Lambda/NodeJS 從 DynamoDB 獲取項目

[英]How To Get Item From DynamoDB Based On Multiple (one primary) Attributes Lambda/NodeJS

我在 DynamoDB 中的表結構如下所示:

uuid(主鍵)| ip | 用戶代理

從 lambda 內部的 NodeJS function 中,我想獲取 ip 和 useragent 與我提供的信息匹配的項目的 uuid。

隨着每周數以百萬計的項目被添加到表中,隨着時間的推移, Scan變得越來越低效率和越來越昂貴。

這是我用來嘗試完成此操作的代碼:

function tieDown(sIP, uA){
 const userQuery = {
       Key : {
         "ip" : "192.168.0.1",
         "userAgent" : "sample"
       },
       TableName: "mytable"
      };
  return ddb.get(userQuery, function(err, data){
   if (err) console.log(err.stack);
  }).promise();
}

執行此代碼時,將引發以下錯誤ValidationException: The provided key element does not match the schema

所以我想我的問題是:

  • 是否甚至可以根據非主要屬性獲得一個特定的項目
  • 我提供的代碼示例是否有任何問題可能導致引發此錯誤? (我正在使用DocumentClient ,因此無需顯式聲明字符串、數字等。

謝謝!

如果不指定分區鍵和排序鍵(如果有),則無法使用get操作獲取單個項目。 在大多數情況下應避免掃描。 您可能需要的是一個全局二級索引,它允許您通過ipuserAgent進行query 請記住,不能保證 GSI 上的記錄是唯一的,因此您可能會得到多個結果。

暫無
暫無

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

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