AWS MySQL RDS vs AWS DynamoDB [fechado]

109

Eu uso o MySQL há um bom tempo e estou confortável com sua estrutura e consultas SQL, etc.

Atualmente construindo um novo sistema no AWS e tenho pesquisado o DynamoDB. Atualmente só sei um pouco sobre isso.

É um melhor que o outro?

Quais são as vantagens do DynamoDB?

como é a transição das consultas MySQL, etc., para este banco de dados de estilo simples?

Adão
fonte

Respostas:

67

Você pode ler a explicação da AWS sobre isso aqui .

Resumindo, se você tiver principalmente consultas de pesquisa (e não consultas de junção), DynamoDB (e outro banco de dados NoSQL) é melhor. Se você precisar lidar com muitos dados , ficará limitado ao usar o MySQL (e outros RDBMS).

Você não pode reutilizar suas consultas MySQL nem seu esquema de dados, mas se você se esforçar para aprender NoSQL, adicionará uma ferramenta importante à sua caixa de ferramentas. Existem muitos casos em que o DynamoDB está oferecendo a solução mais simples.

Cara
fonte
262

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.

Mike Brant
fonte
10
Se eu pudesse aprovar sua resposta em 100, eu o faria.
Salil
Alguns tipos de problemas em um modelo de informação tendem bem para um tipo de implementação NoSQL. Quando você se deparar com esses problemas, pergunte a si mesmo se faria sentido ter um banco de dados NoSQL. Algumas dessas entidades são: Logs, dados de série temporal, redes sociais, gerenciamento de conteúdo, catálogo de produtos etc.
usuário398039
150

Acabamos de migrar todas as nossas tabelas DynamoDB para RDS MySQL.

Embora usar o DynamoDB para tarefas específicas possa fazer sentido, construir um novo sistema com base no DynamoDB é realmente uma má ideia. Melhores planos etc., você sempre precisa daquela flexibilidade extra de seu banco de dados.

Aqui estão nossas razões para deixar o DynamoDB:

  1. Indexação - Alterar ou adicionar chaves em tempo real é impossível sem criar uma nova tabela.
  2. Consultas - a consulta de dados é extremamente limitada. Especialmente se você deseja consultar dados não indexados. Obviamente, as junções são impossíveis, então você precisa gerenciar relações de dados complexas em sua camada de código / cache.
  3. Backup - um procedimento de backup tão tedioso é uma surpresa decepcionante em comparação com o backup inteligente do RDS
  4. GUI - UX ruim, pesquisa limitada, sem graça.
  5. Velocidade - o tempo de resposta é problemático em comparação com RDS. Você se pega construindo um mecanismo de cache elaborado para compensar isso em lugares que você teria se conformado com o cache interno do RDS.
  6. Integridade de dados - embora o conceito de estrutura de dados fluida pareça bom para começar, alguns de seus dados estão melhor "gravados na pedra". A digitação forte é uma bênção quando um pequeno bug tenta destruir seu banco de dados. Com o DynamoDB tudo é possível e, na verdade, tudo que pode dar errado dá.

Agora usamos o DynamoDB como backup para alguns sistemas e tenho certeza que usaremos no futuro para tarefas específicas e bem definidas. Não é um banco de dados ruim, apenas não é o banco de dados para servir 100% do seu sistema central.

Quanto às vantagens, eu diria escalabilidade e durabilidade. Ele é escalonado de forma incrível e transparente e está (meio que) sempre para cima. Esses são recursos realmente ótimos, mas não compensam de forma alguma os aspectos negativos.

Yami Glick
fonte
11
Prós / contras muito específicos. Ótima resposta
stevendesu
10
Algumas dessas coisas estão desatualizadas. Por exemplo, 1 não é mais verdadeiro.
mbroshi
2
Resposta muito bem documentada. No entanto, algumas dessas preocupações podem ser específicas para casos de uso raros. Número 2 - "Joins são obviamente impossíveis" - as estruturas de dados do DynamoDB não devem ter nenhuma relação - ponto final. A tabela deve ser completamente desnormalizada. Isso significa que alguns atributos são duplicados. Para tais casos, use um acionador dínamo ou gravações condicionais. Se os usuários não puderem lidar com a latência para gravações condicionais, coloque uma fila SQS entre o aplicativo e o dínamo. Além disso, o ponto número 6 é denominado incorretamente a ponto de lançar uma dúvida sobre a "integridade" do DynamoDB - essa pode não ser a intenção ...
doles
1
O Dínamo ainda carece de flexibilidade nas consultas. Embora o GSI seja uma grande ajuda, ainda podemos modelar nossos dados melhor com o esquema RDBMS.
Pavan de
1
Eu acrescentaria que os recursos de consulta no DynamoDB têm algumas "pegadinhas". Por exemplo, se a sua chave primária consiste em apenas um hash, uma consulta Dynamo pode retornar apenas 1 entrada, você não pode fornecer um intervalo para uma chave apenas hash no momento da consulta, nem pode consultar sem saber o hash específico do item que você está procurando. BatchGet aceita apenas 100 gets na solicitação, 1 MB de tamanho de resposta total ou 1 MB de tamanho de consulta total, o que ocorrer primeiro. A varredura oferece uma pesquisa flexível, mas é altamente ineficiente e cara, retornando a tabela inteira antes da filtragem.
Brooks
12

Ao usar o DynamoDB, você também deve saber que os itens / registros no DynamoDB são limitados a 400 KB (consulte os limites do DynamoDB ). Para muitos casos de uso, isso não funcionará. Portanto, o DynamoDB será bom para algumas coisas, mas não para todas. O mesmo vale para muitos dos outros bancos de dados NoSQL.

Todos
fonte