Amazon dynamodb 使用与哈希键和范围键相同的DynamoDB属性

Amazon dynamodb 使用与哈希键和范围键相同的DynamoDB属性,amazon-dynamodb,amazon-dynamodb-index,Amazon Dynamodb,Amazon Dynamodb Index,我有一个DynamoDB,它由一个数字键索引。我希望能够检索具有键的特定值的项,并通过按逆排序顺序查询和请求单个项来找到其最大值。当我试图在同一个键上定义下面摘录中的两个索引时,我得到错误“两个键不能有相同的名称” "KeySchema": [ { "AttributeName": "logs", "KeyType": "HASH" }, { "AttributeName": "logs", "KeyType": "RANGE" } ] 您可以只

我有一个DynamoDB,它由一个数字键索引。我希望能够检索具有键的特定值的项,并通过按逆排序顺序查询和请求单个项来找到其最大值。当我试图在同一个键上定义下面摘录中的两个索引时,我得到错误“两个键不能有相同的名称”

"KeySchema": [
  {
    "AttributeName": "logs",
    "KeyType": "HASH"
  },
  {
    "AttributeName": "logs",
    "KeyType": "RANGE"
  }
]

您可以只使用散列键而不使用范围键来定义密钥架构

"KeySchema": [
  {
    "AttributeName": "logs",
    "KeyType": "HASH"
  }
]
要使用特定的“日志”值请求项目,请使用

要找到最高值,您需要执行以下操作。这是一种很难找到最高值的方法,因为这意味着要评估表中的每个项目。这将是缓慢和昂贵的

您可能需要重新评估您的方法。如果您只是试图创建唯一的ID,那么这不是DynamoDB的正确方法。你应该做的是:

  • 生成一个长UUID
  • 执行以下操作以验证UUID是否可用。这在DynamoDB中是非常便宜和快速的
  • 使用UUID

您可以只使用散列键而不使用范围键来定义密钥模式

"KeySchema": [
  {
    "AttributeName": "logs",
    "KeyType": "HASH"
  }
]
要使用特定的“日志”值请求项目,请使用

要找到最高值,您需要执行以下操作。这是一种很难找到最高值的方法,因为这意味着要评估表中的每个项目。这将是缓慢和昂贵的

您可能需要重新评估您的方法。如果您只是试图创建唯一的ID,那么这不是DynamoDB的正确方法。你应该做的是:

  • 生成一个长UUID
  • 执行以下操作以验证UUID是否可用。这在DynamoDB中是非常便宜和快速的
  • 使用UUID

属性“logs”的格式和用途是什么?它是一个整数,应用程序每次添加一条新记录时,它都会递增1。在SQL中,我会使用一个串行或自动递增样式的键。属性“logs”的格式和用途是什么?它是一个整数,应用程序每次添加一个新记录时,它都会递增1。在SQL中,我会为此使用串行或自动增量样式的键。我正在尝试改进的现有系统将该ID用作仅散列的键,并执行扫描。您可以移动到创建长随机UUID,而不影响旧数据。基本上,你用一个非常快速的GetItem来代替慢速扫描,以检查随机ID是否可用。我同意当前的设计很有问题,这就是为什么我在探索替代方案。这是否回答了你的问题?我希望有其他东西,但我接受它,因为它确实代表了行业最佳实践。现有系统,我试图改进的是,将ID用作仅哈希键,并进行扫描。您可以创建长随机UUID,而不影响旧数据。基本上,你可以用一个非常快速的GetItem来替换慢扫描,以检查随机ID是否可用。我同意当前的设计很有问题,这就是为什么我在探索替代方案。这是否回答了你的问题?我希望有其他东西,但我接受它,因为它确实代表了行业最佳实践。