查找列表字段在dynamodb

时间:2015-12-10 20:48:29

标签: java amazon-dynamodb

我是DynamoDb的新手,我正在努力解决如何做到这一点(使用java sdk)。

我目前有一个表(在mongo中)用于通知。架构基本如下(我简化了它)

id: string
notifiedUsers: [123, 345, 456, 567]
message: "this is a message"
created: 12345678000 (epoch millis)

我想迁移到Dynamodb,但是我找不到最佳方法来选择在特定日期之后发送给特定用户的所有通知?

我收集我不能在sourcesUsers这样的列表上有索引,因此在这种情况下我不能使用查询 - 这是正确的吗?

我不想扫描然后过滤,可能会有很多记录。

有没有办法使用查询或其他方法来做到这一点?

EDIT 这就是我现在正在尝试的,它不起作用,我不知道该把它带到哪里(如果有的话)。

Condition rangeKeyCondition = new Condition()
    .withComparisonOperator(ComparisonOperator.CONTAINS.toString())
    .withAttributeValueList(new AttributeValue().withS(userId));

if(startTimestamp != null) {
  rangeKeyCondition = rangeKeyCondition.withComparisonOperator(ComparisonOperator.GT.toString())
      .withAttributeValueList(new AttributeValue().withS(startTimestamp));
}

NotificationFeedDynamoRecord replyKey = new NotificationFeedDynamoRecord();
replyKey.setId(partitionKey);

DynamoDBQueryExpression<NotificationFeedDynamoRecord> queryExpression = new DynamoDBQueryExpression<NotificationFeedDynamoRecord>()
    .withHashKeyValues(replyKey)
    .withRangeKeyCondition(NOTIFICATIONS, rangeKeyCondition);

1 个答案:

答案 0 :(得分:0)

如果有其他人遇到这个问题,最后我们将架构展平,以便现在每个userId都有一条记录。这导致了问题,因为使用dynamoDb原子批量写入记录是不可能的。使用原始模式,我们有一条记录,并且可以原子方式编写它,确保所有用户都获得该通知。现在我们无法确定,这会导致痛苦。

相关问题