Oferecemos uma plataforma para clipes de vídeo e áudio, fotos e gráficos vetoriais. Começamos com o MySQL como back-end do banco de dados e incluímos recentemente o MongoDB para armazenar todas as meta-informações dos arquivos, porque o MongoDB se adapta melhor aos requisitos. Por exemplo: as fotos podem ter informações Exif , os vídeos podem ter trilhas de áudio nas quais também queremos armazenar as meta-informações. Vídeos e gráficos vetoriais não compartilham nenhuma meta-informação comum etc., então eu sei que o MongoDB é perfeito para armazenar esses dados não estruturados e mantê-los pesquisáveis.
No entanto, continuamos desenvolvendo nossa plataforma e adicionando recursos. Agora, uma das próximas etapas será fornecer um fórum para nossos usuários. A questão que surge agora é: use o banco de dados MySQL, que seria uma boa opção para armazenar fóruns e postagens em fóruns, etc. ou use o MongoDB para isso também?
Portanto, a questão é: quando usar o MongoDB e quando usar um RDBMS. O que você usaria, mongoDB ou MySQL, se você tivesse a escolha e por que a aceitaria?
Respostas:
No NoSQL: se fosse assim tão fácil , o autor escreve sobre o MongoDB:
Então, na conclusão:
Gosto deste artigo, acho muito informativo, fornece uma boa visão geral do cenário e do hype do NoSQL. Mas, e essa é a parte mais importante, é realmente útil fazer as perguntas certas quando se trata de escolher entre RDBMS e NoSQL. Vale a pena ler IMHO.
Link alternativo para o artigo
fonte
/dev/null
que sejam muito rápidos" : DApós dois anos usando o MongoDb para um aplicativo social, testemunhei o que realmente significa viver sem um SQL RDBMS.
Acredito que 98% de todos os projetos provavelmente são muito melhores com um SQL RDBMS típico do que com o NoSQL.
fonte
Como você disse, o MongoDB é mais adequado para armazenar dados não estruturados. E isso pode organizar seus dados em formato de documento. Esses altenativos do RDBMS, denominados repositórios de dados NoSQL ( MongoDB , CouchDB , Voldemort ), são muito úteis para aplicativos que escalam maciçamente e exigem acesso mais rápido a dados desses armazenamentos de big data.
E a implementação desses bancos de dados é mais simples que o RDBMS comum. Como esses são objetos binários simples, com valor de chave ou estilo de documento, serializados diretamente em disco. Esses armazenamentos de dados não impõem as propriedades ACID e nenhum esquema . Isso não fornece nenhuma habilidade de transação . Portanto, isso pode ser grande e podemos obter acesso mais rápido (leitura e gravação).
Mas, por outro lado, o RDBM aplica ACID e esquemas nos dados. Se você deseja trabalhar com dados estruturados, pode prosseguir com o RDBM.
Eu escolheria o MySQL para criar fóruns para esse tipo de coisa. Porque isso não vai crescer muito. E esta é uma aplicação muito simples (comum) que estruturou relações entre os dados.
fonte
Observe que o Mongo essencialmente armazena JSON. Se seu aplicativo está lidando com muitos objetos JS (com aninhamento) e você deseja persistir esses objetos, há um argumento muito forte para usar o Mongo. Isso torna suas camadas DAL e MVC ultrafinas, porque elas não estão descompactando todas as propriedades do objeto JS e tentando ajustá-las à força em uma estrutura (esquema) na qual elas não se encaixam naturalmente.
Temos um sistema que possui vários objetos JS complexos em seu coração e amamos o Mongo porque podemos persistir em tudo muito, muito facilmente. Nossos objetos também são bastante amorfos e não estruturados, e Mongo absorve essa complicação sem pestanejar. Temos uma camada de relatório personalizada que decifra os dados amorfos para consumo humano, e que não foi tão difícil de desenvolver.
fonte
Eu diria que use um RDBMS se você precisar de transações complexas. Caso contrário, eu usaria o MongoDB - mais flexível para trabalhar e você sabe que ele pode ser dimensionado quando necessário. (Mas sou tendencioso - trabalho no projeto MongoDB)
fonte
Quem precisa de fóruns distribuídos e fragmentados? Talvez o Facebook, mas a menos que você esteja criando um concorrente no Facebook, use o Mysql, o Postgres ou o que você quiser. Se você quiser experimentar o MongoDB, ok, mas não espere que ele faça mágica para você. Ele terá suas peculiaridades e desagradabilidade geral, assim como tudo o mais, como tenho certeza de que você já descobriu se já está trabalhando nisso.
Certamente, o MongoDB pode ser sensacional e parecer fácil na superfície, mas você terá problemas que produtos mais maduros já superaram. Não seja atraído com tanta facilidade, mas espere até o "nosql" amadurecer ou morrer.
Pessoalmente, acho que o "nosql" vai murchar e morrer de fragmentação, pois não há padrões estabelecidos (quase por definição). Portanto, não vou apostar pessoalmente em projetos de longo prazo.
A única coisa que pode salvar "nosql" no meu livro é se ele pode se integrar perfeitamente ao Ruby ou a idiomas semelhantes e tornar o idioma "persistente", quase sem sobrecarga na codificação e no design. Isso pode acontecer, mas vou esperar até lá, não agora, e precisa ser mais maduro, é claro.
Btw, por que você está criando um fórum a partir do zero? Existem muitos fóruns de código aberto que podem ser ajustados para atender à maioria dos requisitos, a menos que você realmente esteja criando a próxima geração de fóruns (o que duvido).
fonte
Eu já vi muitas empresas usando o MongoDB para análises em tempo real a partir dos logs do aplicativo. Sua ausência de esquema realmente se encaixa nos logs de aplicativos, onde o esquema de registros tende a mudar de tempos em tempos. Além disso, seu recurso Capped Collection é útil porque limpa automaticamente os dados antigos para manter os dados ajustados na memória.
Essa é uma área em que realmente acho que o MongoDB se encaixa, mas o MySQL / PostgreSQL é mais recomendado em geral. Existem muitas documentações e recursos para desenvolvedores na Web, assim como sua funcionalidade e robustez.
fonte
A 2 principal razão pela qual você pode preferir o Mongo é
É adequado para aplicativos de big data. RDBMS não é bom para big data.
fonte
Você sabe, todo esse material sobre as junções e as 'transações complexas' - mas foi o próprio Monty que, há muitos anos, explicou a "necessidade" de COMMIT / ROLLBACK, dizendo que 'tudo o que é feito nas classes lógicas (e não o banco de dados) de qualquer maneira '- então é a mesma coisa novamente. O que é necessário é um mecanismo de armazenamento / recuperação de dados estúpido, mas incrivelmente organizado e rápido, para 99% do que os aplicativos da web fazem.
fonte
Como dito anteriormente, você pode escolher entre várias opções, consulte todas essas opções: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis
O que eu sugiro é encontrar a melhor combinação: MySQL + Memcache é realmente ótimo se você precisar de ACID e quiser juntar-se a algumas tabelas. MongoDB + Redis é perfeito para armazenamento de documentos Neo4J é perfeito para banco de dados de gráficos
O que faço: começo com o MySQl + Memcache porque estou acostumado, depois começo a usar outras estruturas de banco de dados. Em um único projeto, você pode combinar MySQL e MongoDB, por exemplo!
fonte