如何从DynamoDB(iOS和PHP)获取行计数?(How to get row count fr

2019-11-01 04:56发布

我需要查询DynamoDB表获得的行数有所帮助。

想想,我有三个字段,“用户名”,“密码”和“用户类型”一表“用户”。 用户类型可以是“管理员”,“雇员”或@“客人”。 现在,我想“管理”的计数表。 在SQL我们写这样的查询,

SELECT COUNT(*) FROM Users WHERE UserType='Admin'

现在我需要做同样的使用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;
}

在这里,我获取所有行知道计数。 我知道这是不正确的做法,是一个真正的坏主意。 我不知道该如何独自获得了计数,而获取的所有行。

  1. 我想知道如何做到这一点的的iOS SDK。
  2. 我想知道如何做到这一点在PHP SDK为好。

谢谢。

Answer 1:

我不能回答PHP也不IOS SDK,因为我用都没有(我使用Python)的。 但是,从低水平DynamoDB点:

  • 如果所有用户都是admin,您可以使用ItemCountDescribeTable 。 它仅更新每6个小时,但它是免费的
  • 如果UserTyperange_key (外观极好),你可以设置Count的PARAM QueryTrue然后读Count答案的领域。
  • 在其他情况下 (坏),使用扫描,你会与Query与您的过滤条件一起。

这就是说, QueryScan将始终返回的项目数。 该Count PARAM只指示他们不要返回真实的项目。 请注意,仅有备用带宽。 这不会是任何更快也不置备吞吐量方面更便宜。

如果你是在第三的情况下,我建议你重新设计你的架构的,因为这将是非常缓慢和昂贵。 在所有的请求,则需要经过整个表。



Answer 2:

对于PHP的一部分,你需要做一个Scan ,你的代码看起来像...

$dynamodb = new AmazonDynamoDB();

$response = $dynamodb->scan(array(
'TableName' => 'Users',
'ScanFilter' => array( 'UserType' => array( 'ComparisonOperator' => "EQ", 'AttributeValueList' => array( array( AmazonDynamoDB::TYPE_STRING => "Admin" ) ) ) ) ));

现在,你需要Count返回的记录。

$count = (int) $response->body->Count;

现在,打印出来,如果你想...

echo (string) $count;

对于登录例如,您可以参考这个博客条目...

用Amazon Web Services创建登录(AWS)DynamoDB



文章来源: How to get row count from DynamoDB (iOS & PHP)?