如何通过从 DynamoDB 中的非关键属性搜索来获取一个项目?
How to get one Item by searching from non-key attribute in DynamoDB?
我在 DynamoDB 中有一个 table,并且有分区键和排序键。例如table结构如下
// Primary Keys
id -> PK
name -> SK
Info -> json Formatted Attributes
假设 table、
中有两项
// Item 1
{
id: 10245-25-45,
name: "Name 1",
info: {
userId: 1012, // PK
userName: "ABC", // SK
type: "type 1",
date: "2020-01-03 04:05:12"
}
}
// Item 2
{
id: 10245-65-70, // pK
name: "Name 2", // SK
info: {
userId: 1013,
userName: "ABCD",
type: "type 2",
date: "2020-01-03 04:10:12"
}
}
我正在使用 Java
作为语言并使用 DynamoDBMapper
进行 CRUD 操作。所以我知道我可以使用 DynamoDBMapper.load()
通过提供 PK
和 SK
来获得一件物品,
但我想知道如何通过搜索非关键属性来获取数据。例如,我需要通过提供
一次获得一件物品
// userId, userName, type, data are unique values so it will give only one record if exists
find item by userId;
find item by userId and userName;
find item by type and date;
以上是我的一些访问模式,基本上,我需要在不提供 PK 和 SK 的情况下获取数据,而且我不能使用全局二级索引。所以我知道有查询。但我想知道没有那个有什么办法可以做我需要的吗?如果有人能帮助我,我真的很感激。提前致谢。
这在 dynamoDB 中是不可能的,因为数据的分布式特性和完整 table 扫描否定了此存储选项的使用。
如果数据需要可搜索,则应使用搜索数据库,如果数据量较小,则可以使用 SQL 类型的数据库。
为了获得可靠的解决方案,我会使用弹性搜索(AWS 有一个托管解决方案),在弹性中仅填充可搜索的字段,在您的情况下 userID
、name
、date
等并将文档的 id 存储在 dynamoDB
所以搜索 API ,将查询 elastic 检索项目 ID,然后从 dynamoDB
检索项目
我在 DynamoDB 中有一个 table,并且有分区键和排序键。例如table结构如下
// Primary Keys
id -> PK
name -> SK
Info -> json Formatted Attributes
假设 table、
中有两项// Item 1
{
id: 10245-25-45,
name: "Name 1",
info: {
userId: 1012, // PK
userName: "ABC", // SK
type: "type 1",
date: "2020-01-03 04:05:12"
}
}
// Item 2
{
id: 10245-65-70, // pK
name: "Name 2", // SK
info: {
userId: 1013,
userName: "ABCD",
type: "type 2",
date: "2020-01-03 04:10:12"
}
}
我正在使用 Java
作为语言并使用 DynamoDBMapper
进行 CRUD 操作。所以我知道我可以使用 DynamoDBMapper.load()
通过提供 PK
和 SK
来获得一件物品,
但我想知道如何通过搜索非关键属性来获取数据。例如,我需要通过提供
// userId, userName, type, data are unique values so it will give only one record if exists
find item by userId;
find item by userId and userName;
find item by type and date;
以上是我的一些访问模式,基本上,我需要在不提供 PK 和 SK 的情况下获取数据,而且我不能使用全局二级索引。所以我知道有查询。但我想知道没有那个有什么办法可以做我需要的吗?如果有人能帮助我,我真的很感激。提前致谢。
这在 dynamoDB 中是不可能的,因为数据的分布式特性和完整 table 扫描否定了此存储选项的使用。
如果数据需要可搜索,则应使用搜索数据库,如果数据量较小,则可以使用 SQL 类型的数据库。
为了获得可靠的解决方案,我会使用弹性搜索(AWS 有一个托管解决方案),在弹性中仅填充可搜索的字段,在您的情况下 userID
、name
、date
等并将文档的 id 存储在 dynamoDB
所以搜索 API ,将查询 elastic 检索项目 ID,然后从 dynamoDB
检索项目