gpt4 book ai didi

java - 如何在 dynamoDb 中查询包含特定子字符串的分区键?

转载 作者:搜寻专家 更新时间:2023-11-01 02:39:54 26 4
gpt4 key购买 nike

我有一个由 2 个字符串组成的 partitionKey,例如用户 ID:用户名。例如 1234:John、4567:Mark 等。我想查询与 UserName 定义的子字符串匹配的所有记录,例如查找分区键中所有包含“Mark”的记录。我如何使用 Java 中的 DynamoDb API 执行此操作?

最佳答案

希望这不是您必须经常做的事情。

DynamoDB 不支持通过部分散列键查询。您将不得不使用表扫描来遍历表中的所有元素并比较每个元素是否匹配。

这是非常低效的,如果您发现自己依赖于这种类型的行为,那么您必须重新审视您对哈希键的选择以及您的整体设计选择。

为了完整起见,如果您使用的是 Document API,则您正在查找的代码如下所示:

// dynamo returns results in chunks - you'll need this to get the next one
Map<String, AttributeValue> lastKeyEvaluated = null;

do {
ScanRequest scanRequest = new ScanRequest()
.withTableName("YourTableNameHere")
.withExclusiveStartKey(lastKeyEvaluated);

ScanResult result = client.scan(scanRequest);
for (Map<String, AttributeValue> item : result.getItems()){
// for each item in the result set, examine the partition key
// to determine if it's a match
string key = item.get("YourPartitionKeyAttributeNameHere").getS();
if (key.startsWith("Mark"))
System.out.println("Found an item that matches *:Mark:\n" + item);
}
lastKeyEvaluated = result.getLastEvaluatedKey();
} while (lastKeyEvaluated != null);

但在您的应用程序中实现类似的东西之前,请考虑选择不同的分区键策略,或创建一个 secondary index用于您的表,或两者 - 如果您需要经常进行此类查询!

附带说明一下,我很好奇,在分区键中同时包含用户 ID 和用户名有什么好处?用户 ID 大概对您来说是唯一的,那么为什么要使用用户名呢?

关于java - 如何在 dynamoDb 中查询包含特定子字符串的分区键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049725/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com