Davvero DynamoDB e MySQL sono mele e arance. DynamoDB è un livello di archiviazione NoSQL mentre MySQL viene utilizzato per l'archiviazione relazionale. È necessario scegliere cosa utilizzare in base alle effettive esigenze dell'applicazione. In effetti, alcune applicazioni potrebbero essere ben servite utilizzando entrambi.
Se, ad esempio, stai archiviando dati che non si prestano bene a uno schema relazionale (strutture ad albero, rappresentazioni JSON senza schema, ecc.) Che possono essere confrontati con una singola chiave o una combinazione chiave / intervallo, DynamoDB ( o qualche altro negozio NoSQL) sarebbe probabilmente la soluzione migliore.
Se disponi di uno schema ben definito per i tuoi dati che può adattarsi bene a una struttura relazionale e hai bisogno della flessibilità per interrogare i dati in diversi modi (aggiungendo gli indici se necessario, ovviamente), RDS potrebbe essere una soluzione migliore .
Il vantaggio principale dell'utilizzo di DynamoDB come archivio NoSQL è che si ottiene un throughput di lettura / scrittura garantito a qualsiasi livello richiesto senza doversi preoccupare di gestire un data store in cluster. Quindi, se la tua applicazione richiede 1000 letture / scritture al secondo, puoi semplicemente eseguire il provisioning della tua tabella DynamoDB per quel livello di throughput e non devi davvero preoccuparti dell'infrastruttura sottostante.
RDS ha lo stesso vantaggio di non doversi preoccupare dell'infrastruttura stessa, tuttavia se si finisce per aver bisogno di fare un numero significativo di scritture fino al punto in cui la dimensione dell'istanza più grande non sarà più al passo, si viene lasciati senza opzioni (puoi ridimensionare orizzontalmente per le letture utilizzando le repliche di lettura).
Nota aggiornata: DynamoDb ora supporta l'indicizzazione secondaria globale, quindi ora hai la possibilità di eseguire ricerche ottimizzate su campi dati diversi dall'hash o dalla combinazione di hash e chiavi di intervallo.