2016-04-17 16 views
5

Ho una tabella di dinamo con 5 capacità di lettura e 5 di scrittura. In questo tavolo ho avuto due record.DynamoDB Throttling

Ho quindi deciso di vedere quale tipo di risposta all'errore avrei ottenuto premendo un numero elevato di scritture contemporaneamente (circa 4000 record in una sequenza). La linea blu "consumata" è passata direttamente sulla linea rossa "capacità", tuttavia non ho ricevuto alcun messaggio di errore di alcun tipo.

Le metriche indicano che la limitazione si sta verificando ma le mie letture si verificano ancora e le mie scritture si verificano ancora se si superano entrambi i livelli di capacità.

Ho trascorso più di 30 minuti spingendo la lettura e scrive ben oltre la capacità, senza errori ancora.

Non sono sicuro se questo è perché sto usando l'SDK javascript ufficiale nel nodo js, ​​che forse gestisce in modo trasparente la limitazione e ritenta le query limitate?

Spero che qualcuno possa darmi qualche indicazione su questo.

Grazie

risposta

1

Questo a causa della capacità di scoppio. Puoi leggere ulteriori informazioni sui documenti AWS: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GuidelinesForTables.html#GuidelinesForTables.Bursting

In pratica, ciò significa che puoi avere fino a 300 secondi di "capacità memorizzata" e utilizzarla come pool quando hai un picco di carico. Nel tuo caso si tratta di un pool di 1500 richieste che puoi utilizzare immediatamente e che viene nuovamente ricaricato quando la capacità non è utilizzata.

2

Volevo solo aggiungere un avviso sulla limitazione alla risposta da @Luc Hendriks

Anche dopo si è fuori della 'capacità di scoppiare' e DynamoDB inizia a strozzamento, si otterrà ProvisionedThroughputExceededException relativamente raramente (come per la mia esperienza) . Questo perché SDK ripete silenziosamente le richieste limitate (quindi avevi ragione, SDK gestisce in modo trasparente la limitazione).

È possibile utilizzare il parametro maxRetries per disabilitare i tentativi automatici, in modo da ottenere ProvisionedThroughputExceededException subito dopo aver visto la limitazione delle metriche.

Ecco un esempio come eseguire una richiesta di aggiornamento senza tentativi automatici:

var aws_dynamodb = new aws.DynamoDB({maxRetries: 0}), 
    aws_dynamodb_doc = new aws.DynamoDB.DocumentClient({service: aws_dynamodb}); 

// ... 
aws_dynamodb_doc.update(params, function(err, data) { 
    // ... 
}); 
+0

Grazie. Una strana "cosa" che sto notando è la cifra "returnConsumerCapacity" dalla query stessa. Mostra 255 quando interrogo una tabella per circa 10.000 record, ma nelle metriche dynamodb mostra solo 4.25 di capacità consumata. Davvero perplesso da questo! – user1873468

+0

Quanto ci vuole per interrogare i 10.000 articoli? È probabile che il 4,25 sia il valore medio per un certo periodo di tempo, 1 minuto o 5 minuti. –

+0

Sì, come indicato nella console, il grafico delle metriche mostra le unità di capacità consumate al secondo in media su un periodo di 1 minuto. Quindi, se hai creato una query che ha consumato 255 unità e durante quel particolare minuto non hai effettuato altre query, il grafico mostra 255/60 = 4,25 al secondo – xtx