Javascript 使用最新时间戳和;电子邮件ID

Javascript 使用最新时间戳和;电子邮件ID,javascript,amazon-web-services,amazon-dynamodb,Javascript,Amazon Web Services,Amazon Dynamodb,我想用emailId过滤用户,并获取最近的行条目,即根据要显示的电子邮件ID获取用户的最新数据。在我的例子中,subscriptionID是分区键。没有辅助索引或排序键。有必要这样做吗?或者其他我应该选择的方法 我的Dynamo查询:- var docClient=new AWS.DynamoDB.DocumentClient({region:AWS.config.region}); 变量参数={ TableName:“许可证”, FilterExpression:“customerEmail

我想用emailId过滤用户,并获取最近的行条目,即根据要显示的电子邮件ID获取用户的最新数据。在我的例子中,subscriptionID是分区键。没有辅助索引或排序键。有必要这样做吗?或者其他我应该选择的方法

我的Dynamo查询:-

var docClient=new AWS.DynamoDB.DocumentClient({region:AWS.config.region});
变量参数={
TableName:“许可证”,
FilterExpression:“customerEmail=:email”,
表达式属性值:{
“:电子邮件”:电子邮件
},
};
docClient.scan(参数、函数(错误、数据){
如果(错误)
{
控制台日志(err);
}
其他的
{
console.log('length',data.Items.length);
console.log(数据项);
}

});
A
scan
是从DynamoDB获取数据的最昂贵的方式,在大多数情况下都应该避免

您当前正在使用subscriptionID作为分区密钥,这无助于通过客户电子邮件获取项目。最有效的方法是使用一个主键,用户email作为分区键,时间戳(购买日期)作为排序键。如果以这种方式存储数据,可以执行以下操作:

query(
      TableName= 'License',
      KeyConditionExpression= '#pk = :pk',
      ExpressionAttributeNames={
          '#pk': 'subscriptionID'
      },
      ExpressionAttributeValues={
          ':pk': { 'S': 'apandey@projitechinc.com' }
      },
      ScanIndexForward=False,
      Limit=1
)
关于此操作,需要注意以下几点:

  • 这是一个
    查询
    操作,比
    扫描
    操作效率更高
  • ScanIndexForward=False
    将使用排序键按降序排序(升序设置为true或省略)
  • Limit=1
    获取最高结果(例如最新条目)
  • 当然,您的数据当前的存储方式不支持此查询。为此,您有两个选择:

  • 更改存储数据的方式以支持此访问模式。如果这样做会破坏其他访问模式,那么这可能不是一个选项
  • 引入一个二级索引,使用用户电子邮件作为分区键,购买日期作为排序键

  • 为了充分利用DynamoDB,您必须设计表以及如何存储数据以支持应用程序访问模式。如您所见,您当前的设计不容易支持所需的访问模式。有许多方法可以设计表来支持这种类型的查询,但这种模式在许多应用程序中很常见。

    A
    scan
    是从DynamoDB获取数据的最昂贵的方法,在大多数情况下应该避免

    您当前正在使用subscriptionID作为分区密钥,这无助于通过客户电子邮件获取项目。最有效的方法是使用一个主键,用户email作为分区键,时间戳(购买日期)作为排序键。如果以这种方式存储数据,可以执行以下操作:

    query(
          TableName= 'License',
          KeyConditionExpression= '#pk = :pk',
          ExpressionAttributeNames={
              '#pk': 'subscriptionID'
          },
          ExpressionAttributeValues={
              ':pk': { 'S': 'apandey@projitechinc.com' }
          },
          ScanIndexForward=False,
          Limit=1
    )
    
    关于此操作,需要注意以下几点:

  • 这是一个
    查询
    操作,比
    扫描
    操作效率更高
  • ScanIndexForward=False
    将使用排序键按降序排序(升序设置为true或省略)
  • Limit=1
    获取最高结果(例如最新条目)
  • 当然,您的数据当前的存储方式不支持此查询。为此,您有两个选择:

  • 更改存储数据的方式以支持此访问模式。如果这样做会破坏其他访问模式,那么这可能不是一个选项
  • 引入一个二级索引,使用用户电子邮件作为分区键,购买日期作为排序键

  • 为了充分利用DynamoDB,您必须设计表以及如何存储数据以支持应用程序访问模式。如您所见,您当前的设计不容易支持所需的访问模式。有许多方法可以设计表来支持这种类型的查询,但这种模式在许多应用程序中很常见。

    如果我理解您的问题,您希望能够查询与给定电子邮件地址关联的最新项目。您可以添加分区键=电子邮件地址和排序键=时间戳的GSI,然后使用ScanIndexForward=false和Limit=1查询分区键=电子邮件地址以获取最新的。非常感谢您的帮助。如果我理解您的问题,您希望能够查询与给定电子邮件地址关联的最新项目。您可以添加分区键=电子邮件地址且排序键=时间戳的GSI,然后使用ScanIndexForward=false和Limit=1查询分区键=电子邮件地址以获取最新的。非常感谢您的帮助。非常感谢。谢谢你的帮助,我很高兴能帮上忙。祝你好运谢谢。谢谢你的帮助,我很高兴能帮上忙。祝你好运