As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Use declarações em lote no Amazon Keyspaces
Você pode combinar várias DELETE operações INSERTUPDATE, e em uma BATCH declaração. LOGGEDos lotes são o padrão.
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
Quando você executa uma instrução em lote, o driver combina todas as instruções no lote em uma única operação em lote.
Para decidir qual tipo de operação em lote usar, você pode considerar as diretrizes a seguir.
- Use lotes registrados quando:
-
-
Você precisa de garantias de transação atômica.
-
Latências um pouco mais altas são uma compensação aceitável.
-
- Use lotes não registrados quando:
-
-
Você precisa otimizar as operações de partição única.
-
Você quer reduzir a sobrecarga da rede.
-
Você tem requisitos de alto rendimento.
-
Para obter informações sobre cotas do extrato em lote, consulteCotas para Amazon Keyspaces (para Apache Cassandra).
Lotes não registrados
Com lotes não registrados, o Amazon Keyspaces processa várias operações como uma única solicitação sem manter um registro de lotes. Com uma operação em lote não registrada, é possível que algumas ações sejam bem-sucedidas e outras falhem. Lotes não registrados são úteis quando você deseja:
-
Otimize as operações em uma única partição.
-
Reduza o tráfego de rede agrupando solicitações relacionadas.
A sintaxe de um lote não registrado é semelhante à de um lote registrado, com a adição da palavra-chave. UNLOGGED
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
Um lote registrado combina várias ações de gravação em uma única operação atômica. Quando você executa um lote registrado:
-
Todas as ações são bem-sucedidas juntas ou falham juntas.
-
A operação é síncrona e idempotente.
-
Você pode gravar em várias tabelas do Amazon Keyspaces, desde que estejam na mesma AWS conta e. Região da AWS
Os lotes registrados podem ter latências um pouco maiores. Para aplicações de alto rendimento, considere usar lotes não registrados.
Não há custo adicional para usar lotes registrados no Amazon Keyspaces. Você paga somente pelas gravações que fazem parte de suas operações em lote. O Amazon Keyspaces executa duas gravações subjacentes de cada linha do lote: uma para preparar a linha para o lote e outra para confirmar o lote. Ao planejar a capacidade de tabelas que usam lotes registrados, lembre-se de que cada linha em um lote exige o dobro da capacidade de uma operação de gravação padrão. Por exemplo, se seu aplicativo executa um lote registrado por segundo com três linhas de 1 KB, você precisará provisionar seis unidades de capacidade de gravação (WCUs) em comparação com apenas três WCUs para gravações individuais ou lotes não registrados.
Para obter informações sobre preços, consulte o Amazon Keyspaces (para Apache Cassandra)
Melhores práticas para operações em lote
Considere as seguintes práticas recomendadas ao usar operações em lote do Amazon Keyspaces.
-
Ative o escalonamento automático para garantir que você tenha capacidade de processamento suficiente para que suas tabelas lidem com operações em lote e com os requisitos adicionais de produtividade dos lotes registrados.
-
Use operações individuais ou lotes não registrados quando as operações podem ser executadas de forma independente sem afetar a exatidão do aplicativo.
-
Projete seu aplicativo para minimizar as atualizações simultâneas nas mesmas linhas, pois as operações simultâneas em lote podem entrar em conflito e falhar.
-
Para ingestão de dados em massa de alto rendimento sem requisitos de atomicidade, use operações de gravação individuais ou lotes não registrados.
Consistência e simultaneidade
O Amazon Keyspaces impõe as seguintes regras de consistência e simultaneidade para lotes registrados:
-
Todas as operações em lote usam o nível de
LOCAL_QUORUMconsistência. -
Lotes simultâneos que afetam linhas diferentes podem ser executados simultaneamente.
DELETEOperaçõesINSERTUPDATEsimultâneas ou em linhas envolvidas em um lote em andamento falham devido a um conflito.
Operadores e condições suportados
- Operadores de
WHEREcláusulas compatíveis: -
Igualdade (=)
- Operadores não suportados:
-
Operadores de faixa (>, <, >=, <=)
Operador
INOperador
LIKEOperador
BETWEEN
- Não suportado em lotes registrados:
-
Várias declarações afetando a mesma linha
Operações contrárias
Exclusões de intervalo
Condições de falha das declarações de lote registradas
Uma operação em lote registrada pode falhar em qualquer um dos seguintes casos:
-
Expressões condicionais (como
IF NOT EXISTSouIF) são avaliadas como falsas. -
Uma ou mais operações contêm parâmetros inválidos.
-
A solicitação está em conflito com outra operação em lote em execução nas mesmas linhas.
-
A tabela não tem capacidade provisionada suficiente.
-
Uma linha excede o limite máximo de tamanho.
-
O formato dos dados de entrada é inválido.
Declarações em lote e replicação multirregional
Em implantações multirregionais:
-
As operações da região de origem são síncronas e atômicas.
-
As operações da região de destino são assíncronas.
-
É garantido que todas as operações em lote sejam replicadas, mas podem não manter o isolamento durante a aplicação.
Monitore as operações em lote
Você pode monitorar operações em lote usando CloudWatch métricas da Amazon para monitorar desempenho, erros e padrões de uso. O Amazon Keyspaces fornece as seguintes CloudWatch métricas para monitorar operações em lote por tabela:
SuccessfulRequestCount— Acompanhe operações em lote bem-sucedidas.Latency— Meça o desempenho da operação em lote.ConsumedWriteCapacityUnits— Monitore o consumo de capacidade das operações em lote.
Para obter mais informações, consulte Métricas do Amazon Keyspaces.
Além das CloudWatch métricas, você pode usar AWS CloudTrail para registrar todas as ações da API do Amazon Keyspaces. Cada ação de API no lote é registrada, CloudTrail facilitando o rastreamento e a auditoria de operações em lote nas suas tabelas do Amazon Keyspaces.
Exemplos de operação em lote
Veja a seguir um exemplo de uma declaração básica de lote registrada.
BEGIN BATCH INSERT INTO users (id, firstname, lastname) VALUES (1, 'John', 'Doe'); INSERT INTO users (id, firstname, lastname) VALUES (2, 'Jane', 'Smith'); APPLY BATCH;
Esse é um exemplo de um lote que inclui DELETE instruções INSERTUPDATE, e.
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 é um exemplo de um lote usando carimbos de data/hora do lado do 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;
Esse é um exemplo 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 é um exemplo de lote usando 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;
Esse é um exemplo de uma instrução em lote que atualiza várias tabelas.
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 é um exemplo de uma operação em lote usando tipos definidos pelo usuário (UDTs). O exemplo pressupõe que o UDT address exista.
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;