Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Usa declaraciones por lotes en Amazon Keyspaces
Puede combinar varias INSERT DELETE operaciones UPDATE y en una BATCH declaración. LOGGEDlos lotes son los predeterminados.
batch_statement ::= BEGIN [ UNLOGGED ] BATCH [ USING update_parameter( AND update_parameter)* ] modification_statement ( ';' modification_statement )* APPLY BATCH modification_statement ::= insert_statement | update_statement | delete_statement
Al ejecutar una declaración de lote, el conductor combina todas las declaraciones del lote en una sola operación de lote.
Para decidir qué tipo de operación por lotes utilizar, puede tener en cuenta las siguientes pautas.
- Utilice lotes registrados cuando:
-
-
Necesita garantías de transacciones atómicas.
-
Las latencias ligeramente más altas son una compensación aceptable.
-
- Utilice lotes no registrados cuando:
-
-
Necesita optimizar las operaciones de una sola partición.
-
Desea reducir la sobrecarga de la red.
-
Tiene requisitos de alto rendimiento.
-
Para obtener información sobre las cuotas de extractos de lotes, consulte. Cuotas para Amazon Keyspaces (para Apache Cassandra)
Lotes no registrados
Con los lotes no registrados, Amazon Keyspaces procesa varias operaciones como una sola solicitud sin mantener un registro de lotes. Con una operación por lotes sin registrar, es posible que algunas de las acciones se realicen correctamente y que otras no. Los lotes no registrados son útiles cuando se quiere:
-
Optimice las operaciones dentro de una sola partición.
-
Reduzca el tráfico de red agrupando las solicitudes relacionadas.
La sintaxis de un lote no registrado es similar a la de un lote registrado, con la adición de la UNLOGGED palabra clave.
BEGIN UNLOGGED BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;
Lotes registrados
Un lote registrado combina múltiples acciones de escritura en una sola operación atómica. Al ejecutar un lote registrado:
-
Todas las acciones se realizan correctamente juntas o fallan juntas.
-
La operación es sincrónica e idempotente.
-
Puedes escribir en varias tablas de Amazon Keyspaces, siempre y cuando estén en la misma AWS cuenta y. Región de AWS
Los lotes registrados pueden tener latencias ligeramente superiores. Para aplicaciones de alto rendimiento, considere la posibilidad de utilizar lotes no registrados.
El uso de lotes registrados en Amazon Keyspaces no conlleva ningún coste adicional. Solo paga por las escrituras que forman parte de sus operaciones por lotes. Amazon Keyspaces realiza dos escrituras subyacentes en cada fila del lote: una para preparar la fila para el lote y otra para confirmar el lote. Al planificar la capacidad de las tablas que utilizan lotes registrados, recuerde que cada fila de un lote requiere el doble de capacidad que una operación de escritura estándar. Por ejemplo, si su aplicación ejecuta un lote registrado por segundo con tres filas de 1 KB, necesitará aprovisionar seis unidades de capacidad de escritura (WCUs), en lugar de solo tres WCUs para las escrituras individuales o los lotes no registrados.
Para obtener información sobre precios, consulte Precios de Amazon Keyspaces (para Apache Cassandra)
Prácticas recomendadas para las operaciones por lotes
Tenga en cuenta las siguientes prácticas recomendadas al utilizar las operaciones por lotes de Amazon Keyspaces.
-
Active el escalado automático para asegurarse de que tiene la capacidad de rendimiento suficiente para que sus tablas puedan gestionar las operaciones por lotes y los requisitos de rendimiento adicionales de los lotes registrados.
-
Utilice operaciones individuales o lotes no registrados cuando las operaciones se puedan ejecutar de forma independiente sin que ello afecte a la corrección de la aplicación.
-
Diseñe su aplicación para minimizar las actualizaciones simultáneas en las mismas filas, ya que las operaciones por lotes simultáneas pueden entrar en conflicto y fallar.
-
Para una ingesta masiva de datos de alto rendimiento sin requisitos de atomicidad, utilice operaciones de escritura individuales o lotes no registrados.
Coherencia y simultaneidad
Amazon Keyspaces aplica las siguientes reglas de coherencia y simultaneidad para los lotes registrados:
-
Todas las operaciones por lotes utilizan el nivel de coherencia.
LOCAL_QUORUM -
Los lotes simultáneos que afectan a diferentes filas se pueden ejecutar simultáneamente.
DELETELas operacionesINSERTsimultáneasUPDATEo en las filas implicadas en un lote en curso fallan y se produce un conflicto.
Operadores y condiciones compatibles
- Operadores de
WHEREcláusulas compatibles: -
Igualdad (=)
- Operadores no compatibles:
-
Operadores de rango (>, <, >=, < =)
operador
INoperador
LIKEoperador
BETWEEN
- No se admiten en lotes registrados:
-
Varias declaraciones que afectan a la misma fila
Operaciones de contraataque
Eliminaciones de rango
Condiciones de error de las declaraciones de lotes registradas
Una operación por lotes registrada puede fallar en cualquiera de los siguientes casos:
-
Las expresiones de condición (como
IF NOT EXISTSoIF) se evalúan como falsas. -
Una o más operaciones contienen parámetros no válidos.
-
La solicitud entra en conflicto con otra operación por lotes que se ejecuta en las mismas filas.
-
La tabla carece de suficiente capacidad aprovisionada.
-
Una fila supera el límite de tamaño máximo.
-
El formato de datos de entrada no es válido.
Declaraciones por lotes y replicación multirregional
En despliegues multirregionales:
-
Las operaciones de la región de origen son sincrónicas y atómicas.
-
Las operaciones de la región de destino son asíncronas.
-
Se garantiza que todas las operaciones por lotes se replicarán, pero es posible que no mantengan el aislamiento durante la aplicación.
Supervise las operaciones por lotes
Puedes supervisar las operaciones por lotes mediante las CloudWatch métricas de Amazon para hacer un seguimiento del rendimiento, los errores y los patrones de uso. Amazon Keyspaces proporciona las siguientes CloudWatch métricas para supervisar las operaciones por lotes por tabla:
SuccessfulRequestCount— Realice un seguimiento de las operaciones por lotes exitosas.Latency— Mida el rendimiento de las operaciones por lotes.ConsumedWriteCapacityUnits— Supervise el consumo de capacidad de las operaciones por lotes.
Para obtener más información, consulte Métricas de Amazon Keyspaces.
Además de las CloudWatch métricas, puede utilizarlas AWS CloudTrail para registrar todas las acciones de la API de Amazon Keyspaces. Cada acción de la API del lote se registra, lo CloudTrail que facilita el seguimiento y la auditoría de las operaciones por lotes en las tablas de Amazon Keyspaces.
Ejemplos de operaciones por lotes
A continuación se muestra un ejemplo de una sentencia básica por lotes registrados.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;
Este es un ejemplo de un lote que incluye INSERTUPDATE, y DELETE declaraciones.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); UPDATE users SET firstname = 'Johnny' WHERE id = 2; DELETE FROM users WHERE id = 3; APPLY BATCH;
Este es un ejemplo de un lote que utiliza marcas de tiempo del lado del cliente.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Stiles') USING TIMESTAMP 1669069624; INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Doe') USING TIMESTAMP 1669069624; APPLY BATCH; BEGIN BATCH UPDATE users USING TIMESTAMP 1669069624 SET firstname = 'Carlos' WHERE id = 1; UPDATE users USING TIMESTAMP 1669069624 SET firstname = 'Diego' WHERE id = 2; APPLY BATCH;
Este es un ejemplo de lote condicional.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'Jane', 'Doe') IF NOT EXISTS; INSERT INTO users (id, firstname, lastname) VALUES (2, 'John', 'Doe') IF NOT EXISTS; APPLY BATCH; BEGIN BATCH UPDATE users SET lastname = 'Stiles' WHERE id = 1 IF lastname = 'Doe'; UPDATE users SET lastname = 'Stiles' WHERE id = 2 IF lastname = 'Doe'; APPLY BATCH;
Este es un ejemplo de un lote que utiliza Time to Live (TTL).
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe') USING TTL 3600; INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith') USING TTL 7200; APPLY BATCH;
Este es un ejemplo de una sentencia por lotes que actualiza varias tablas.
BEGIN BATCH INSERT INTO users (id, firstname) VALUES (1, 'John'); INSERT INTO user_emails (user_id, email) VALUES (1, 'john@example.com'); APPLY BATCH;
Este es un ejemplo de una operación por lotes que utiliza tipos definidos por el usuario (UDTs). En el ejemplo se supone que la UDT existe. address
BEGIN BATCH INSERT INTO users (id, firstname, address) VALUES (1, 'John', {street: '123 Main St', city: 'NYC', zip: '10001'}); INSERT INTO users (id, firstname, address) VALUES (2, 'Jane', {street: '456 Oak Ave', city: 'LA', zip: '90210'}); APPLY BATCH; BEGIN BATCH UPDATE users SET address.zip = '10002' WHERE id = 1; UPDATE users SET address.city = 'Boston' WHERE id = 2; APPLY BATCH;