如何从DynamoDB(iOS和PHP)获取行数?

Emp*_*ack 0 php amazon-web-services ios amazon-dynamodb

我需要帮助查询DynamoDB表以获取行数.

考虑一下,我有一个表"Users"有三个字段,"UserName","Password"和"UserType".UserType可以是"Admin","Employee"或@"Guest".现在我想在表格中获得"Admin"的数量.在SQL中我们编写这样的查询,

SELECT COUNT(*) FROM Users WHERE UserType='Admin'
Run Code Online (Sandbox Code Playgroud)

现在我需要使用DynamoDB iOS SDK来做同样的事情.现在,我这样做.

- (int)adminUsersCount {
    DynamoDBScanRequest *request = [[[DynamoDBScanRequest alloc] initWithTableName:@"Users"] autorelease];
    DynamoDBCondition *condition = [[[DynamoDBCondition alloc] init] autorelease];
    NSMutableArray *attrList = [NSMutableArray arrayWithObject:[[[DynamoDBAttributeValue alloc] initWithS:@"Admin"]] autorelease]];
    condition.attributeValueList = attrList;
    condition.comparisonOperator = @"EQ";
    [request setScanFilterValue:condition forKey:@"UserType"];
    DynamoDBScanResponse *response = [[AmazonClientManager ddb] scan:request];
    return response.items.count;
}
Run Code Online (Sandbox Code Playgroud)

在这里,我将获取所有行以了解该计数.我知道这不是正确的方法,而且确实是一个坏主意.我不知道如何在不获取所有行的情况下单独获取计数.

  1. 我想知道在iOS SDK中如何做到这一点.
  2. 我想知道如何在PHP SDK中做到这一点.

谢谢.

yad*_*taf 11

我不能回答PHP或IOS SDK,因为我没有使用它们(我使用Python).但是,从DynamoDB的低级别来看:

  • 如果所有用户都是admin,您可以使用ItemCountDescribeTable.它每6小时更新一次,但它是免费的
  • 如果UserTyperange_key(优秀),您可以设置Countparam Queryto True然后读取Count答案的字段.
  • 在所有其他情况下(错误),请像使用"扫描"一样使用" Query过滤条件".

这就是说,QueryScan将始终返回的项目数.该Count参数仅指示他们不要退回真实物品.请注意,它只会节省带宽.在提供的吞吐量方面,它不会更快,也不会更便宜.

如果您处于第三种情况,我建议您重新设计您的架构,因为它会非常缓慢且昂贵.在所有请求中,您将需要浏览整个表格.