Realmente DynamoDB e MySQL são maçãs e laranjas. O DynamoDB é uma camada de armazenamento NoSQL, enquanto o MySQL é usado para armazenamento relacional. Você deve escolher o que usar com base nas necessidades reais do seu aplicativo. Na verdade, alguns aplicativos podem ser bem servidos usando ambos.
Se, por exemplo, você estiver armazenando dados que não se prestam bem a um esquema relacional (estruturas de árvore, representações JSON sem esquema etc.) que podem ser consultados em uma única chave ou uma combinação de chave/intervalo, o DynamoDB ( ou alguma outra loja NoSQL) provavelmente seria sua melhor aposta.
Se você tiver um esquema bem definido para seus dados que possa se encaixar bem em uma estrutura relacional e precisar de flexibilidade para consultar os dados de várias maneiras diferentes (adicionando índices conforme necessário, é claro), o RDS pode ser uma solução melhor .
O principal benefício de usar o DynamoDB como um armazenamento NoSQL é que você obtém taxa de transferência garantida de leitura/gravação em qualquer nível necessário sem ter que se preocupar em gerenciar um armazenamento de dados em cluster. Portanto, se seu aplicativo exigir 1.000 leituras/gravações por segundo, você poderá apenas provisionar sua tabela do DynamoDB para esse nível de taxa de transferência e não precisar se preocupar com a infraestrutura subjacente.
O RDS tem o mesmo benefício de não ter que se preocupar com a infraestrutura em si, no entanto, se você acabar precisando fazer um número significativo de gravações a ponto de o maior tamanho de instância não acompanhar mais, você ficará sem opções (você pode dimensionar horizontalmente para leituras usando réplicas de leitura).
Observação atualizada:o DynamoDb agora oferece suporte à indexação secundária global, portanto, agora você tem a capacidade de realizar pesquisas otimizadas em campos de dados que não sejam o hash ou a combinação de chaves de hash e intervalo.