使用表从dynamodb获取主键列表的结果

时间:2017-08-01 07:53:20

标签: amazon-dynamodb

我有一个dynamodB table,我可以通过以下方式获取单行:

private Table myTable;

myTable = dynamoDB.getTable(tableName);
myTable.getItem(new PrimaryKey(primaryKey, primaryKeyValue));

我有办法检索主键列表吗?我看到我可以使用batchGetItem但是为此我需要使用AmazonDynamoDB接口。是否有使用该表的替代方法?

2 个答案:

答案 0 :(得分:0)

要获取表格中的所有项目,您需要使用Scan operation

  

“扫描”操作返回一个或多个项目和项目属性   访问表或二级索引中的每个项目。拥有DynamoDB   返回较少的项目,可以提供FilterExpression操作。

     

如果扫描的项目总数超过最大数据集大小   限制为1 MB,扫描停止,结果返回给用户   一个LastEvaluatedKey值,用于在后续步骤中继续扫描   操作。结果还包括超过的项目数量   限制。扫描可能导致没有符合过滤条件的表数据。

默认情况下,它会返回所有字段,但您可以提供projection expression以仅获取某些字段(在您的情况下为ID):

  

要从表中读取数据,可以使用GetItem,Query等操作,   或扫描。 DynamoDB默认返回所有项属性。至   得到一些,而不是所有的属性,使用投影   表达

     

投影表达式是一个标识您的属性的字符串   想。要检索单个属性,请指定其名称。多个   属性,名称必须以逗号分隔。

请记住,扫描费用很高,因为您不支付DynamoDB返回的项目,而是支付DynamoDB在数据库中读取的项目:

  

扫描操作始终扫描整个表或二级索引,   然后过滤掉值以提供所需的结果   添加从结果集中删除数据的额外步骤。避免   对具有过滤器的大型表或索引使用扫描操作   如果可能,删除许多结果。此外,随着表或索引的增长,   扫描操作减慢。扫描操作检查每个项目   请求的值,并可以用尽a的预配置吞吐量   单个操作中的大表或索引。为了缩短响应时间,   设计表和索引,以便您的应用程序可以使用Query   而不是扫描。 (对于表,您还可以考虑使用GetItem   和BatchGetItem API。)。

答案 1 :(得分:0)

没有批次获取表类的项目的原因: -

1)表类是线程安全的

2)Table类实现项目的原子操作,如DeleteItemApi,GetItemApi,PutItemApi,QueryApi,ScanApi,UpdateItemApi

3)批量获取项目需要处理多个项目

4)最重要的一点是批量获取项目可以从多个表获取项目

从多个表中获取项目的示例代码: -

以下代码从MoviesPost

获取项目
DynamoDB dynamoDB = new DynamoDB(dynamoDBClient);

TableKeysAndAttributes movieTableKeyAndAttributes = new TableKeysAndAttributes("Movies").withPrimaryKeys(new PrimaryKey("yearkey",1999 ,"title", "List test title"));
TableKeysAndAttributes postableKeyAndAttributes = new TableKeysAndAttributes("post").withPrimaryKeys(new PrimaryKey("postId", "14"));

BatchGetItemSpec batchGetItemSpec = new BatchGetItemSpec().withTableKeyAndAttributes(movieTableKeyAndAttributes,postableKeyAndAttributes);

BatchGetItemOutcome batchGetItemOutcome = dynamoDB.batchGetItem(batchGetItemSpec);

            System.out.println(batchGetItemOutcome.getBatchGetItemResult().getResponses());