Мне нужна помощь в запросе таблицы DynamoDB, чтобы получить количество строк.
У меня есть таблица «Пользователи» с тремя полями: «Имя пользователя», «Пароль» и «Пользовательский тип». UserType может быть «Admin», «Employee» или «Guest». Теперь я хочу получить счет «Admin» в таблице. В SQL мы пишем запрос следующим образом:
SELECT COUNT(*) FROM Users WHERE UserType='Admin'
Теперь мне нужно сделать то же самое с помощью SDK DynamoDB iOS. Пока я делаю это так.
- (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; }
Здесь я собираю все строки, чтобы узнать, что подсчет. Я знаю, что это не правильный путь и действительно плохая идея. Я не знаю, как получить счет в одиночку, не выбирая все строки.
Благодарю.
Я не могу ответить за PHP или IOS SDK, так как я не использую ни один из них (я использую Python). Но с низкой точки зрения DynamoDB:
ItemCount
из DescribeTable
. Он обновляется только каждые 6 часов, но он бесплатный UserType
– это range_key
(excelent), вы можете установить для параметра Count
param of Query
значение True
затем прочитать поле Count
ответа. Query
вместе со своим фильтром. Это говорит о том, что Query
и Scan
всегда возвращают количество элементов. Параметр Count
указывает только, чтобы они не возвращали реальные предметы. Обратите внимание, что он обслуживает только полосу пропускания. Это не будет быстрее и дешевле с точки зрения пропускной способности.
Если вы в третьем случае, я предлагаю вам перестроить вашу схему, поскольку она будет очень медленной и дорогостоящей. По всем запросам вам нужно будет пройти всю таблицу.
Для части 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 = (int) $response->body->Count;
Теперь распечатайте его, если хотите …
echo (string) $count;
Для примера входа вы можете обратиться к этой записи в блоге …
Создание входа с помощью Amazon Web Services (AWS) DynamoDB