是否可以在不分页的情况下获取 dynamodb 扫描结果的记录数?
Is it possible to fetch record count for dynamodb scan result without pagination?
我的 dynamodb 中有一组记录 table。我想根据特定条件 不分页 获取记录数。
这是我获取数据的代码:
$db = $this->getDi()->get('dynamodb');
$dynamodb = $db->createDynamoDb();
$FilterExpression='tenant_id = :tid';
$ExpressionAttributeValuesArr=array(':tid'=>array('S'=>'16008d5bXYZ'), ':mod'=>array('S'=>"leads"));
scan_request=array(
'TableName' => 'xxxx',
'Count' => true,
'FilterExpression' => $FilterExpression.' AND #module = :mod',
'ExpressionAttributeNames' => array('#module' => 'module'),
'ExpressionAttributeValues' => $ExpressionAttributeValuesArr,
);
$scan_response = $dynamodb->scan($scan_request);
此代码 returns 记录列表和计数但不是整个集合或整个计数,因为我可以看到响应中返回的 LastEvaluatedKey
字段。我需要为这次扫描返回整个记录集的计数。我怎样才能做到这一点 ?这甚至可以不分页吗?
恐怕不是,COUNT
是一个迟到的请求-也就是说,dynamo 读取(并且收费你这样做)table 中的每条记录,然后再应用过滤器然后将其减少到计数。
这就是您必须分页的原因,因为计数运算符只会 "see" 达到页面长度。
如果您不需要这样做 programatically/accurately,我会向您指出 AWS 在 DynamoDB 控制台中显示的 "estimated count"。
我的 dynamodb 中有一组记录 table。我想根据特定条件 不分页 获取记录数。 这是我获取数据的代码:
$db = $this->getDi()->get('dynamodb');
$dynamodb = $db->createDynamoDb();
$FilterExpression='tenant_id = :tid';
$ExpressionAttributeValuesArr=array(':tid'=>array('S'=>'16008d5bXYZ'), ':mod'=>array('S'=>"leads"));
scan_request=array(
'TableName' => 'xxxx',
'Count' => true,
'FilterExpression' => $FilterExpression.' AND #module = :mod',
'ExpressionAttributeNames' => array('#module' => 'module'),
'ExpressionAttributeValues' => $ExpressionAttributeValuesArr,
);
$scan_response = $dynamodb->scan($scan_request);
此代码 returns 记录列表和计数但不是整个集合或整个计数,因为我可以看到响应中返回的 LastEvaluatedKey
字段。我需要为这次扫描返回整个记录集的计数。我怎样才能做到这一点 ?这甚至可以不分页吗?
恐怕不是,COUNT
是一个迟到的请求-也就是说,dynamo 读取(并且收费你这样做)table 中的每条记录,然后再应用过滤器然后将其减少到计数。
这就是您必须分页的原因,因为计数运算符只会 "see" 达到页面长度。
如果您不需要这样做 programatically/accurately,我会向您指出 AWS 在 DynamoDB 控制台中显示的 "estimated count"。