Na verdade, o DynamoDB e o MySQL são maçãs e laranjas. DynamoDB é uma camada de armazenamento NoSQL, enquanto o MySQL é usado para armazenamento relacional. Você deve escolher o que usar com base nas necessidades reais de seu aplicativo. Na verdade, alguns aplicativos podem ser bem atendidos com o uso de ambos.
Se, por exemplo, você estiver armazenando dados que não se adaptam 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, em seguida, DynamoDB ( ou alguma outra loja NoSQL) provavelmente seria sua melhor aposta.
Se você tiver um esquema bem definido para seus dados que pode 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 uma taxa de transferência de leitura / gravação garantida em qualquer nível necessário, sem ter que se preocupar com o gerenciamento de um armazenamento de dados em cluster. Portanto, se seu aplicativo requer 1000 leituras / gravações por segundo, você pode apenas provisionar sua tabela do DynamoDB para esse nível de taxa de transferência e não precisar realmente se preocupar com a infraestrutura subjacente.
O RDS tem muito do 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 até o ponto em que o maior tamanho de instância não será mais compatível, você ficará sem opções (você pode escalar horizontalmente para leituras usando réplicas de leitura).
Nota atualizada: o DynamoDb agora oferece suporte à indexação secundária global, então agora você tem a capacidade de realizar pesquisas otimizadas em campos de dados que não sejam o hash ou combinação de chaves hash e de intervalo.