Estou desde o começo deste ano acompanhando o hype dos bancos de dados orientados a documento, também chamado de NoSQL (embora não goste muito deste termo). Como bom curioso, resolvi testar algumas variações como o CouchDB e MongoDB, onde acabei me identificando mais com o segundo. Gostei da praticidade e rapidez em fazer as coisas com ele, também a performance me chamou muito a atenção, tem uma boa biblioteca Python e a documentação é muito objetiva, com exemplos de uso. Esses pontos foram decisivos para a escolha.
Com um banco de dados orientado a documentos, não existe a necessidade de criar o modelo das tabelas, basta definir um documento (estilo JSON) e inserir na base. Esses documentos podem ter campos a mais ou a menos dependendo da necessidade e tudo pode ser indexado e encontrado facilmente.
Estou trabalhando em um projeto onde é necessário indexar uma grande quantidade de informações e documentos. O problema é que muitos documentos não seguem um padrão e existe a necessidade de estar alimentando a base a todo instante com novas informações. Já desenvolvi modelos de busca neste estilo utilizando o Xapian, que é uma excelente ferramenta. Porém a performance fica bastante prejudicada quando a base é atualizada várias vezes ao dia, pois o Xapian mantém muito bem sua performance quando sua base (Quartz) está com os índices devidamente criados e compactados. Ficar atualizando esses índices o tempo todo prejudica a aplicação.
Fiz um teste importando todos esse volume de informações em uma base do MongoDB. Fiquei surpreso pela rapidez em importar os dados, cheguei a acreditar que tivesse acontecido algum problema durante a importação. Mas mexendo no banco, pude observar que tudo foi importado. Com algumas ferramentas desenvolvidas em Python, é possível alimentar a base a todo instante com novas informações e percebi que isso não atrapalha a performance das consultas. Mais um ponto a favor do MongoDB.
A aplicação frontend está sendo desenvolvida em Django, que não suporta oficialmente o MongoDB, mas utilizando módulos externos, é possível fazer o Django falar com MongoDB sem muita dificuldade. Cheguei a testar o MongoEngine e outras receitas (como nos posts integrating MongoDB and Django e Python, Django e MongoDB) mas para meu caso, foi mais fácil usar as ferramentas desenvolvidas internamente em Python para inserir e buscar valores da base.
De uma forma geral o MongoDB é uma ótima solução para armazenar e buscar um volume grande de documentos. Não posso dizer que é melhor ou pior que um banco de dados relacional, tudo depende do modelo de negócio, da aplicação e do que pretende fazer com as informações. Cada caso é um caso, seria muito injusto em dizer que vou substituir todas minhas aplicações de banco de dados relacional para o banco de dados orientado a documentos. Mas os testes serviram para mostrar não é apenas um hype, os bancos orientados a documentos podem ser uma ótima solução para casos mais complexos, que não dependem apenas de um simples CRUD.
De bônus, vale a leitura do post Choosing a non-relational database; why we migrated from MySQL to MongoDB, estou totalmente de acordo com as opiniões do autor e passei por situações bem parecidas.
Nos próximos dias publicarei mais informações sobre MongoDB e um pequeno tutorial. Se desejar ser informado, aproveite para assinar o conteúdo desse blog, basta inserir seu e-mail no campo logo abaixo deste post (e-mails só serão enviados quando existir atualização de conteúdo do blog).
Muito interessante, Christiano.
Já ouvi falar sobre o MongoDB mas ainda não tinha lido um relato de alguém que usou.
Você comentou sobre ter optado em usar outras ferramentas para busca na base, quais foram os motivos por não ter usado o MongoEngine?
Abraços e parabéns pelo post,
Olá Heigler,
Foi muito tranquilo fazer quase tudo que precisava apenas com o Pymongo. Digamos que esse foi o principal motivo!
Mas estou analisando o MongoEngine com calma e provavelmente será aplicado em algumas etapas da ferramenta.
Abraços!
Legal Christiano
Um esquema assim me ajudará no meu projeto em Django.
Vou acompanhar mais de perto suas dicas!
Valeu …
Olá Sérgio,
Bom saber que tem mais pessoas interessadas nessa tecnologia e assim poder trocar informações!
Abraços!
Olá, há algum tempo li um de seus posts sobre mongodb e achei muito interessante, desde então venho lendo cada vez mais sobre este banco de dados. Atualmente tenho utilizado o mongodb para armazenar os logs do squid e estou para desenvolver uma aplicação web com django para gerar relatórios em cima desses logs. Você está utilizando o pymongo diretamente dentro do django?
Oi Bruno,
Interessante saber seu uso para o MongoDB, percebe-se que é uma ferramenta bastante flexível e pode ser utilizada para diversas finalidades.
Sim, estou usando o Pymongo diretamente no Django, por enquanto atende minhas necessidades sem muita dificuldade. Mas estou avaliando o uso do MongoEngine também.
Abraços!
Oi,
Também estou na mesma esteira. Tenho usado o mongoengine. É um projeto bem novo e com alguns bugs, mas acho que tem bastante futuro.
No começo eu chiei pelo fato deles não terem feito um ORM mais ao estilo de Storm ou SQLAlchemy, mas ao final acabei achando que o estilo Django teria mais aceitação e, quem sabe, um futura integração.
Ótimo post.
Oi Eduardo,
Pois é, também notei alguns bugs no MongoEngine, mas nada tão grave.
Toda essa tecnologia é recente (embora o conceito seja mais antigo). Logo as ferramentas estarão mais estáveis e produtivas, eu mesmo pretendo contribuir um pouco.
Abraços!
Hi,
I read your post and I’m glad that you’re interested on using mongodb and django. We’ve been working on a django-mongodb-enigne that should simplfy the djagno-mongdb integration. It works as a normal django backend, suppers syncdb (just for collection and index creations) and the best thing is that you don’t have to modify any of your models.
I’ll paste the link here so you can take a look.
[0] http://github.com/FlaPer87/django-mongodb-engine
P.S: I don’t speak Portuguese I can read it because I speak spanish which is very similar…
Flavio,
Thanks a lot for your comment. I am going to test Django-mongodb-engine, nice project!
Cheers,
Christiano
Ok e Sobre o framework Web2py, vc tem algo a dizer com a integraçao do MongoDB?
obrigado