0

行数を取得するためにDynamoDBテーブルをクエリするのに助けが必要です。

「UserName」、「Password」、「UserType」の3つのフィールドを持つテーブル「Users」があるとします。UserTypeは、「Admin」、「Employee」、または@「Guest」のいずれかです。次に、テーブル内の「管理者」の数を取得します。SQLでは、次のようなクエリを記述します。

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

次に、DynamoDBiOSSDKを使用して同じことを行う必要があります。今のところ、こうやってやっています。

- (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. iOSSDKでそれを行う方法を知りたいです。
  2. PHPSDKでもそれを行う方法を知りたいです。

ありがとう。

4

2 に答える 2

11

PHPもIOSSDKも使用していないため、どちらも使用できません(Pythonを使用しています)。ただし、低レベルのDynamoDBの観点からは、次のようになります。

  • すべてのユーザーが管理者ItemCountである場合は、から使用できますDescribeTable。6時間ごとにのみ更新されますが、無料です
  • UserTyperange_key(優れている)の場合Count、のパラメータを設定して、回答のフィールドをQuery読み取るTrueことができます。Count
  • 他のすべての場合Query(悪い)は、フィルター条件と一緒にスキャンを使用します。

これは、Query常にScanアイテム数を返します。paramはCount、実際のアイテムを返さないように指示するだけです。帯域幅を節約するだけであることに注意してください。プロビジョニングされたスループットの点で、これ以上速くも安くもなりません。

3番目のケースの場合は、非常に遅くて費用がかかるため、スキーマを再設計することをお勧めします。すべてのリクエストで、テーブル全体を確認する必要があります。

于 2012-11-06T14:33:21.800 に答える
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;

ログインの例については、このブログエントリを参照できます...

アマゾンウェブサービス(AWS)DynamoDBを使用したログインの作成

于 2012-11-20T14:56:49.570 に答える