Estou acostumado a usar bancos de dados relacionais como MySQL ou PostgreSQL e combinados com frameworks MVC como Symfony, RoR ou Django, e acho que funciona muito bem.
Mas ultimamente tenho ouvido muito sobre o MongoDB, que é um banco de dados não relacional ou, para citar a definição oficial ,
um banco de dados escalonável, de alto desempenho, de código aberto, sem esquemas e orientado a documentos.
Estou muito interessado em estar no limite e quero estar ciente de todas as opções que terei para um próximo projeto e escolher as melhores tecnologias que existem.
Em quais casos o uso do MongoDB (ou bancos de dados semelhantes) é melhor do que o uso de bancos de dados relacionais "clássicos"? E quais são as vantagens do MongoDB em relação ao MySQL em geral? Ou pelo menos, por que é tão diferente?
Se você tiver dicas para documentação e / ou exemplos, será de grande ajuda também.
As vantagens são inúmeras.
Por exemplo, seu esquema de banco de dados será mais escalável, você não terá que se preocupar com migrações, o código será mais agradável de escrever ... Por exemplo, aqui está um dos códigos do meu modelo:
Adicionar uma chave é apenas adicionar uma linha de código!
Existem também outras vantagens que surgirão no longo prazo, como uma melhor escalabilidade e velocidade.
... Mas tenha em mente que um banco de dados não relacional não é melhor do que um relacional . Se o seu banco de dados tiver muitas relações e normalização, pode fazer pouco sentido usar algo como o MongoDB. É tudo uma questão de encontrar a ferramenta certa para o trabalho.
Para mais coisas para ler, eu recomendo dar uma olhada em " Por que eu acho que o Mongo é para os bancos de dados o que o Rails foi para os Frameworks " ou este post no site do mongodb. Para ficar animado e se você fala francês, dê uma olhada neste artigo que explica como configurar o MongoDB do zero.
Edit: Quase esqueci de falar sobre esse railscast de Ryan . É muito interessante e dá vontade de começar já!
fonte
A vantagem do esquema sem esquema é que você pode despejar qualquer carga que esteja nele, e ninguém jamais terá qualquer motivo para reclamar ou dizer que estava errado.
Também significa que tudo o que você despeja nele permanece totalmente vazio de significado depois de ter feito isso.
Alguns classificariam isso como uma grande desvantagem, outros não.
O fato de um banco de dados relacional possuir um esquema bem estabelecido, é consequência do fato de ele possuir um conjunto bem estabelecido de predicados extensionais, que são os que nos permitem atribuir significado ao que está registrado no banco de dados, e quais são também um pré-requisito necessário para que o façamos.
Sem um esquema bem estabelecido, sem predicados extensionais e sem precicados extensionais, não há como o usuário extrair qualquer significado do que foi inserido nele.
fonte
O MongoDB foi apresentado no FLOSS Weekly esta semana - http://twit.tv/floss105 Um banco de dados que usa um conceito semelhante é o CouchDB, que foi apresentado em outro FLOSS Weekly: http://twit.tv/floss36
Acho que vale a pena ouvi-los além dos links fornecidos por @marcgg
fonte
Minha experiência com Postgres e Mongo após trabalhar com os dois bancos de dados em meus projetos.
Postgres (RDBMS)
O Postgres é recomendado se seus aplicativos futuros tiverem um esquema complicado que precise de muitas junções ou todos os dados tiverem relações ou se houver muita escrita. Postgres é open source, mais rápido, compatível com ACID e usa menos memória em disco, e também tem bom desempenho para armazenamento JSON e inclui serializabilidade completa de transações com 3 níveis de isolamento de transação.
A maior vantagem de ficar com o Postgres é que temos o melhor dos dois mundos. Podemos armazenar dados em JSONB com restrições, consistência e velocidade. Por outro lado, podemos usar todos os recursos SQL para outros tipos de dados. O mecanismo subjacente é muito estável e lida bem com uma boa variedade de volumes de dados. Ele também funciona com sua escolha de hardware e sistema operacional. Postgres fornecendo recursos NoSQL junto com suporte total a transações, armazenando documentos JSON com restrições nos dados dos campos.
Restrições gerais para Postgres
Escalonar Postgres horizontalmente é significativamente mais difícil, mas factível.
As operações de leitura rápida não podem ser totalmente realizadas com o Postgres.
SEM bases de dados SQL
Mongo DB (tigre com fio)
O MongoDB pode vencer o Postgres em dimensão de “escala horizontal”. Armazenar JSON é o que o Mongo é otimizado para fazer. O Mongo armazena seus dados em um formato binário chamado BSONb que é (aproximadamente) apenas uma representação binária de um superconjunto de JSON. O MongoDB armazena objetos exatamente como foram projetados. De acordo com o MongoDB, para aplicativos de gravação intensiva, Mongo diz que o novo mecanismo (Wired Tiger) oferece aos usuários um aumento de até 10 vezes no desempenho de gravação (eu deveria tentar isso), com 80 por cento de redução na utilização do armazenamento, ajudando a reduzir os custos de armazenamento , obter uma maior utilização de hardware.
Restrições gerais do MongoDb
O uso de um mecanismo de armazenamento sem esquema leva ao problema de esquemas implícitos. Esses esquemas não são definidos por nosso mecanismo de armazenamento, mas sim com base no comportamento e nas expectativas do aplicativo.
As tecnologias NoSQL autônomas não atendem aos padrões ACID porque sacrificam proteções de dados críticos em favor do desempenho de alto rendimento para aplicativos não estruturados. Não é difícil aplicar ACID em bancos de dados NoSQL, mas tornaria o banco de dados lento e inflexível até certo ponto. “A maioria das limitações NoSQL foram otimizadas nas versões e lançamentos mais recentes que superaram suas limitações anteriores em grande medida”.
fonte
É tudo uma questão de compensações. O MongoDB é rápido, mas não é ACID, não possui transações. É melhor que o MySQL em alguns casos de uso e pior em outros.
fonte
Bellow Lines Written in MongoDB: The Definitive Guide.
fonte
Depois de uma questão de bancos de dados com armazenamento textual), dei uma olhada no MongoDB e sistemas semelhantes.
Se bem entendi, eles devem ser mais fáceis de usar e configurar, e muito mais rápidos. Talvez também mais seguro, pois a falta de SQL impede a injeção de SQL ...
Aparentemente, o MongoDB é usado principalmente para aplicativos da web.
Basicamente, e eles próprios afirmam, esses bancos de dados não são adequados para consultas complexas, mineração de dados etc. Mas eles brilham na recuperação rápida de muitos dados simples.
fonte
fonte