DynamoDB vs MongoDB NoSQL
eu estou tentando descobrir o que posso usar para um projeto de futuro, nós plano para armazenar cerca de 500 mil registros por mês no primeiro ano e talvez mais para os próximos anos, esta é uma aplicação vertical, de modo que não há necessidade de usar um banco de dados para esta, que é a razão pela qual eu decidi escolher um noSQL armazenamento de dados.
A primeira opção que me veio à cabeça foi a mongo db, uma vez que é um produto muito maduro, com muito apoio da comunidade, mas por outro lado temos uma nova marca. produto que oferece um serviço gerenciado no melhor desempenho, eu vou desenvolver esta applciation, mas não há nenhum plano de manutenção (pelo menos por agora), então eu acho que será uma grande vantagem, uma vez que a amazon fornece uma maneira elástica para a escala.a minha maior preocupação é com a estrutura da consulta, ainda não analisei as capacidades da consulta dynamoDB, mas como é um armazenamento de dados k/v, sinto que isto pode ser mais limitado do que mongo db.
Se alguém tivesse a experiência de mover um projecto de mongoDB para DynamoDB, qualquer conselho será totalmente apreciado.8 answers
Migrar do MongoDB para o AWS DynamoDB + SimpleDB
Para comparações rápidas de visão geral, eu realmente gosto deste site, que tem muitas páginas de comparação, por exemplo AWS DynamoDB vs MongoDB; http://db-engines.com/en/system/Amazon + DynamoDB%3BMongoDB
Resposta Curta: comece com SQL e adicione NoSQL apenas quando/se necessário. (a menos que você não precisa de nada além de consultas muito simples)
A minha experiência pessoal: não usei o MongoDB para consultas, mas a partir de abril de 2015 o DynamoDB ainda está muito debilitado quando se trata de qualquer coisa para além das mais básicas consultas de valor/chave. Eu amo isso para o material básico, mas se você quiser linguagem de consulta, em seguida, olhar para uma solução de banco de dados SQL real.No DynamoDB pode consultar um hash ou um hash e range key, e você pode ter vários índices globais secundários. Estou fazendo consultas em uma única tabela com 4 possíveis parâmetros de filtro e ordenando os resultados, isso é suportado (apenas) através do uso dos índices secundários globais com expressões de filtro. O problema surge quando você tenta obter os resultados totais correspondentes ao filtro, você não pode apenas procurar os primeiros 10 itens correspondentes ao filtro, mas sim verificar 10 itens e você pode obter 0 resultados válidos forçando-o a manter re-scanear a partir da continuar chave-dor no pescoço e consome muito de sua quota de leitura de mesa para um cenário simples.
Para ser específico sobre o problema de limite com filtros na consulta, isto é a partir dos documentos (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/QueryAndScan.html#ScanQueryLimit):
In a response, DynamoDB returns all the matching results within the scope of the Limit value. For example, if you issue a Query or a Scan request with a Limit value of 6 and without a filter expression, the operation returns the first six items in the table that match the request parameters. If you also supply a FilterExpression, the operation returns the items within the first six items in the table that match the filter requirements.
A minha conclusão é que as consultas que envolvem expressões de Ficheiros só são utilizáveis em ocasiões muito raras e não são escaláveis porque cada consulta pode leia facilmente a maior parte ou toda a sua mesa que consome demasiadas unidades de leitura DynamoDB. Uma vez que você usa muitas unidades de leitura você vai ser estrangulado e ver o desempenho ruim.
Na Cimeira da AWS, em 9 de Abril de 2015, Brett Hollman, Gestor, Arquitectura de soluções, a AWS na sua conversa sobre ligar para os seus primeiros 10 milhões de utilizadores, defende a criação de uma base de dados SQL e a utilização de NoSQL apenas quando e se isso fizer sentido. Porque mais cedo ou mais tarde você provavelmente vai precisar de um servidor SQL algures na tua pilha. Os slides dele estão aqui: http://www.slideshare.net/AmazonWebServices/deep-dive-scaling-up-to-your-first-10-million-users Ver slide 28.Em segundo lugar, alguns documentos não estavam estruturados e não sabíamos antecipadamente quais seriam os dados, por isso, por exemplo, digamos que o utilizador introduz um documento na colecção do" formulário " como este: {"utilizador": "Utilizador 1", "e-mail": "[email protected] e outro usuário coloca isso na mesma coleção {"phone": "813-555-3333"," location": [28.1234, -83.2342]}. Com mongo podemos pesquisar qualquer um desses campos dinâmicos e desconhecidos a qualquer momento, com Dynamo, você poderia fazer isso, mas teria que fazer um índice cada vez que um novo campo foi adicionado que você queria pesquisável. Então, se você nunca teve um campo de telefone em seu documento Dínamo antes e então de repente, alguns adicionam-no, é completamente indescritível.
Agora isto traz outro ponto à tona. o que mencionou. Às vezes escolher a solução certa para o trabalho nem sempre significa escolher o melhor produto para o trabalho. Por exemplo, você pode ter um cliente que precisa e vai usar o sistema que você criou por mais de 10 anos. Ir com uma solução SaaS / IaaS que é boa o suficiente para fazer o trabalho pode ser uma melhor opção, já que você pode contar com a amazon para ter atualizado e mantido seus sistemas ao longo do longo curso.Eu não acho que seja uma grande ideia mover toda a sua base de dados para o DynamoDB, a razão de ser questionando é difícil, exceto em chaves primárias e secundárias, indexação é limitada e digitalização no DynamoDB é doloroso.
Eu optaria por um tipo híbrido de DB, onde extensos dados capazes de consulta deveriam estar lá há MongoDB, com tudo o que é característica que você nunca sentiria obrigado a fornecer melhorias ou modificações.O DynamoDB é rápido como um raio (mais rápido que o MongoDB) por isso o DynamoDB é muitas vezes usado como uma alternativa às sessões em aplicações escaláveis. As melhores práticas do DynamoDB também sugerem que se houver uma abundância de dados que estão sendo menos utilizados, movê-lo para outra tabela.
Então suponha que você tem um artigo ou feeds. É mais provável que as pessoas procurem coisas da semana passada ou deste mês. as hipóteses de as pessoas visitarem dois anos são muito raras. dado. Para estes fins, o DynamoDB prefere ter os dados armazenados por mês ou anos em tabelas diferentes.O DynamoDB é aparentemente escalável, algo que terá de fazer manualmente em MongoDB. no entanto, você perderia no desempenho do DynamoDB, se você não entender sobre a partição de transferência e como a escala funciona por trás da cena.
DynamoDB deve ser usado onde a velocidade é crítica, MongoDB por outro lado tem muitas mãos e características, algo DynamoDB falta.
Por exemplo, você pode ter um conjunto de réplicas de MongoDB de tal forma que uma das réplicas tenha uma instância de dados de 8(ou o que quer que seja) horas de idade. Realmente útil, se você estragou algo grande tempo em seu DB e quer obter os dados como ele é antes.
Essa é a minha opinião.Grande parte das comparações MongoDB vs. DynamoDB estão desactualizadas devido à recente adição de características do DynamoDB. No entanto, Este post oferece alguns outros pontos convincentes para escolher o DynamoDB, nomeadamente que é simples, de baixa manutenção e, muitas vezes, de baixo custo. outra discussão aqui de escolhas de banco de dados foi interessante de ler, embora um pouco velho.
A minha conclusão é que, se está a fazer perguntas sérias à base de dados ou a trabalhar em languages not supported by DynamoDB, use MongoDB. Caso contrário, fica com o DynamoDB.