php - tabla - dynamodb tutorial
¿Cómo puedo obtener todos los elementos de una tabla de DynamoDB sin especificar la clave principal? (2)
Tengo una tabla llamada productos con Id
clave primaria. Quiero seleccionar todos los elementos en la tabla. Este es el código que estoy usando:
$batch_get_response = $dynamodb->batch_get_item(array(
''RequestItems'' => array(
''products'' => array(
''Keys'' => array(
array( // Key #1
''HashKeyElement'' => array( AmazonDynamoDB::TYPE_NUMBER => ''1''),
''RangeKeyElement'' => array( AmazonDynamoDB::TYPE_NUMBER => $current_time),
),
array( // Key #2
''HashKeyElement'' => array( AmazonDynamoDB::TYPE_NUMBER => ''2''),
''RangeKeyElement'' => array( AmazonDynamoDB::TYPE_NUMBER => $current_time),
),
)
)
)
));
¿Es posible seleccionar todos los elementos sin especificar la clave principal? Estoy usando el SDK de AWS para PHP.
Obtengo todos los elementos de dynamodb con la siguiente consulta. Funciona bien. creo estas funciones genéricas en zend framework y accedo a estas funciones sobre el proyecto.
public function getQuerydata($tablename, $filterKey, $filterValue){
return $this->getQuerydataWithOp($tablename, $filterKey, $filterValue, ''EQ'');
}
public function getQuerydataWithOp($tablename, $filterKey, $filterValue, $compOperator){
$result = $this->getClientdb()->query(array(
''TableName'' => $tablename,
''IndexName'' => $filterKey,
''Select'' => ''ALL_ATTRIBUTES'',
''KeyConditions'' => array(
$filterKey => array(
''AttributeValueList'' => array(
array(''S'' => $filterValue)
),
''ComparisonOperator'' => $compOperator
)
)
));
return $result[''Items''];
}
//Below i Access these functions and get data.
$accountsimg = $this->getQuerydataWithPrimary(''accounts'', ''accountID'',$msgdata[0][''accountID''][''S'']);
Amazon DynamoDB proporciona la operación de Scan para este propósito, que devuelve uno o más elementos y sus atributos al realizar un escaneo completo de una tabla . Tenga en cuenta las siguientes dos restricciones:
Dependiendo del tamaño de su tabla, es posible que necesite usar la paginación para recuperar todo el conjunto de resultados:
Nota
Si el número total de elementos escaneados excede el límite de 1 MB, el escaneo se detiene y los resultados se devuelven al usuario con una LastEvaluatedKey para continuar el escaneo en una operación posterior. Los resultados también incluyen el número de elementos que exceden el límite. Un escaneo puede resultar en que ningún dato de la tabla cumpla con los criterios del filtroEl conjunto de resultados es finalmente consistente.
La operación de escaneo es potencialmente costosa tanto para el rendimiento como para las unidades de capacidad consumida (es decir, el precio), consulte la sección Escaneo y rendimiento de consultas en consultas y escaneo en Amazon DynamoDB :
[...] También, a medida que crece la tabla, la operación de escaneo disminuye. La operación de exploración examina cada elemento en busca de los valores solicitados, y puede utilizar el rendimiento aprovisionado para una tabla grande en una sola operación . Para obtener tiempos de respuesta más rápidos, diseñe sus tablas de manera que pueda utilizar las API Query, Get o BatchGetItem. O bien, diseñe su aplicación para usar las operaciones de escaneo de manera que minimice el impacto en la tasa de solicitud de su mesa. Para obtener más información, consulte Pautas de rendimiento provisto en Amazon DynamoDB . [énfasis mío]
Puede encontrar más detalles sobre esta operación y algunos fragmentos de ejemplo en Tablas de exploración utilizando el API de bajo nivel de AWS SDK for PHP para Amazon DynamoDB , con el ejemplo más simple que ilustra la operación:
$dynamodb = new AmazonDynamoDB();
$scan_response = $dynamodb->scan(array(
''TableName'' => ''ProductCatalog''
));
foreach ($scan_response->body->Items as $item)
{
echo "<p><strong>Item Number:</strong>"
. (string) $item->Id->{AmazonDynamoDB::TYPE_NUMBER};
echo "<br><strong>Item Name: </strong>"
. (string) $item->Title->{AmazonDynamoDB::TYPE_STRING} ."</p>";
}