在DynamoDB中存储对象列表并部分检索它们

时间:2016-10-04 20:42:52

标签: java amazon-dynamodb

这可能是两个单独的问题。但那是我目前的用例。我有一个具有特定属性的POJO。

看起来像是:

class MyObject {
    String id;
    String name;
    int size;

getters and setters () ....
}

现在我有一个这些对象的列表 - 我希望在Dynamo中存储一个列表。像

这样的东西
RecordID            Attributes
abcd123             List<MyObject>

我可以用上述格式将数据存储在Dynamo中吗?我的第二个问题与上述用例有关。

现在我已经存储了记录,我可以检索列表的特定部分吗?就像,我希望从DyanmoDBQuery请求返回索引0 - 5而不是整个列表本身。

这可能吗?

我是DynamoDB的新手,我不确定支持在Dynamo中存储自定义对象的程度。

2 个答案:

答案 0 :(得分:0)

如果您能够按摩架构并转到Partition-Sort键架构,其中Partition键是RecordID,Sort键是ItemNumber,其中Item number是abcd123中每个MyObject的索引在上面的列表中,您可以获得带有范围查询的子列表:

项目示例:

RecordID (partition key) asdfasdfadsf
ItemNumber (sort key)    0
Item                     an instance of MyObject

范围查询参数:

KeyCondition: RecordId = :rid AND ItemNumber BETWEEN :lower AND :upper
ExpressionAttributeValues = { ":rid": "asdfasdfasdf", ":lower": 0, ":upper": 5 }

请注意,:upper边界是包含的,因此上面的查询示例将返回带有RecordId=asdfasdfasdf的MyObjects,其中ItemNumbers为0,1,2,3,4和5.

答案 1 :(得分:0)

您可以通过为要存储在列表中的对象创建一个类的类并使用@DynamoDBDocument对其进行批注来实现。

public class ObjectThatHasTheList {

    private List<ObjectInTheList> list;

    @DynamoDBAttribute(attributeName = "list")
    public List<ObjectInTheList> getList() {
        return list;
    }

    // setter
 }

下面是要存储在列表中的对象的类。

@DynamoDBDocument
public class ObjectInTheList {

    private String id;

    @DynamoDBAttribute(attributeName = "id")
    public String getId() {
        return id;
    }
}