如何有效地检查一个值是否存在于 DynamoDB 中?
How to check if a value exists in DynamoDB effectively?
假设我有一个存储 100 万个令牌的 DynamoDB(令牌是一个简单的字符串)。
我们自己生成令牌(没有 AWS Cognito、没有 JWT、没有 AWS KMS 等)。
令牌是唯一的(没有重复)。
Table 看起来像这样:
Key ID
Token Value
1
!@#$%^
2
^&*()!
3
!#%&()
我想编写一个 Lambda 函数来检查数据库中是否存在特定标记。
如果在 DB 中退出,returns TRUE。
如果不存在,returns FALSE。
但是,令牌不是主键,
所以在这个 table 中搜索一个标记意味着
数据库需要逐条检查每条记录,
查找令牌是否存在于数据库中,
这是非常耗费资源和时间的。
如果我将“令牌值”列转换为全局二级索引,
DynamoDB 可以通过直接转到该 KEY
来检查令牌是否存在吗
而不是一条一条地搜索每条记录?
?
哪个DynamoDB函数用于检查数据库中是否存在key?
是 GetItem 吗?
重新编辑
为什么我需要从一开始就创建 GSI?
这样做意味着我需要额外持有 table...
我可以只使用主键作为令牌值的原始 table 吗?
是的。您可以将 GSI 与您的令牌的主键一起使用。
是的,GetItem
就可以了。
不知道你说的是什么意思。但我认为 DynamoDB 中没有任何功能可以搜索子字符串。必须先获取记录,然后在客户端过滤。
- 是的。请记住,您不能在二级索引上添加唯一性约束
- 使用主键(散列+潜在范围键)时,可以使用GetItem。否则,您必须在 table 或索引上使用查询命令(您可以对字符串 https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html 使用包含运算符)
第三部分,需要单性吗?您可以创建一个辅助 table,它将值键与令牌值上的主键反转。添加新令牌时,您将令牌 + id 添加到 table (有交易?)。写入成本更高。
您还可以设计一个 具有不同项目类型的单个 table:
- pk: id#{id}, 令牌
- pk: token#{token}, id
pk
id
token
id#{id}
id
token
token#{token}
id
token
这样,通过id或者token查找的时候可以直接使用GetItem
您可以在此处找到更多示例 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html
假设我有一个存储 100 万个令牌的 DynamoDB(令牌是一个简单的字符串)。
我们自己生成令牌(没有 AWS Cognito、没有 JWT、没有 AWS KMS 等)。
令牌是唯一的(没有重复)。
Table 看起来像这样:
Key ID | Token Value |
---|---|
1 | !@#$%^ |
2 | ^&*()! |
3 | !#%&() |
我想编写一个 Lambda 函数来检查数据库中是否存在特定标记。
如果在 DB 中退出,returns TRUE。
如果不存在,returns FALSE。
但是,令牌不是主键,
所以在这个 table 中搜索一个标记意味着
数据库需要逐条检查每条记录,
查找令牌是否存在于数据库中,
这是非常耗费资源和时间的。
如果我将“令牌值”列转换为全局二级索引,
DynamoDB 可以通过直接转到该 KEY
来检查令牌是否存在吗 而不是一条一条地搜索每条记录?
?哪个DynamoDB函数用于检查数据库中是否存在key?
是 GetItem 吗?重新编辑
为什么我需要从一开始就创建 GSI?
这样做意味着我需要额外持有 table...
我可以只使用主键作为令牌值的原始 table 吗?
是的。您可以将 GSI 与您的令牌的主键一起使用。
是的,
GetItem
就可以了。不知道你说的是什么意思。但我认为 DynamoDB 中没有任何功能可以搜索子字符串。必须先获取记录,然后在客户端过滤。
- 是的。请记住,您不能在二级索引上添加唯一性约束
- 使用主键(散列+潜在范围键)时,可以使用GetItem。否则,您必须在 table 或索引上使用查询命令(您可以对字符串 https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Condition.html 使用包含运算符)
第三部分,需要单性吗?您可以创建一个辅助 table,它将值键与令牌值上的主键反转。添加新令牌时,您将令牌 + id 添加到 table (有交易?)。写入成本更高。
您还可以设计一个 具有不同项目类型的单个 table:
- pk: id#{id}, 令牌
- pk: token#{token}, id
pk | id | token |
---|---|---|
id#{id} | id | token |
token#{token} | id | token |
这样,通过id或者token查找的时候可以直接使用GetItem
您可以在此处找到更多示例 https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-modeling-nosql-B.html