我有一个dynamodB table,我可以通过以下方式获取单行:
private Table myTable;
myTable = dynamoDB.getTable(tableName);
myTable.getItem(new PrimaryKey(primaryKey, primaryKeyValue));
我有办法检索主键列表吗?我看到我可以使用batchGetItem但是为此我需要使用AmazonDynamoDB接口。是否有使用该表的替代方法?
答案 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)最重要的一点是批量获取项目可以从多个表获取项目
从多个表中获取项目的示例代码: -
以下代码从Movies
和Post
表
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());