Oportunidade para pensar… e pesquisar !


Tudo vai da organização da pessoa né !
Estava eu querendo trocar minha aplicação Django+PostgreSQL para Django+MongoDB. Mas para que ?

É que tenho uma situação no software, que necessitaria de uma model dinâmica, onde eu pudesse inserir e excluir colunas facilmente, e isto teria que se refletir no banco. Pois bem…
Lendo os mais novos post sobre NoSQL , acabei ficando entusiasmado com este assunto, sendo que imaginei de cara que solucionaria facilmente meu problema. Como o NoSQL é baseado em documentos, trabalhamos com ele basicamente como se fossem dicionários, então está resolvido!
Vários dias se passaram, e eu ali com aquela situação na cabeça: trocar o acesso do pgsql para o mongo.
Então ontem sentei na frente do micro e dei uma pesquisada a fundo.

Vi que temos várias ferramentas de acesso ao mongo ( e a bancos NoSQL em geral ). Uns se integram transparentemente do Django, outros nem tanto, uns são asincronos, outros não… etc
Então pesei os dois lados: se eu utilizasse algum que fosse transparente, estaria trocando 6 por meia dúzia, ou seja, trabalhando com NoSQL como se fosse banco relacional. O que não é o que eu queria… não fazia sentido ! Mas se, por outro lado, eu utilizasse um que não fosse transparente ao Django, eu deveria fazer um refactory geral no sistema, trocando várias coisas, alterando várias logicas e gerando bastante trabalho !
Percebi que: não adianta querer utilizar uma tecnologia sem conhecê-la direito !

Ledo engano meu …

Então, parti para uma outra solução. Pensei em utilizar uma model que tivesse um campo que guardasse uma list por exemplo, assim, conseguiria inserir e remover itens e tudo estaria legal. Porém não temos este campo no Django, mas como no DjangoSnippets.org agente acha de tudo, acabei achando um campo chamado DictionaryField, que guarda um dicionário python em formato json no banco. Assim resolvendo meu problema…

E minha model ficará mais ou menos assim :

class Tabela(models.Model):
    nome = models.CharField(max_length=30)

class Registro(models.Model):
    tabela = models.ForeignKey(Tabela)
    registro_id = models.PositiveIntegerField()
    valores = DictionaryField() #aqui terá salvo algo como {"campo1":1,"campo2":"José","campo3":"10/01/2010"}

Então é isto… ficam ai as dicas:
– Antes de iniciar a codificar o projeto, definam bem e pensem bem nas soluções encontradas, pode ser que você tenha uma solução bem melhor para o problema
– Antes de querer utilizar um framework, uma tecnologia, algo novo, obtenha o maior número de informações possíveis antes de mudar/criar algo
– Use o DjangoSnippets.org, é um “baú” de conhecimentos muito valioso.

Algumas coisas interessantes Django Snippets:

DictionaryField
http://djangosnippets.org/snippets/1979/
AutoSlugField
http://djangosnippets.org/snippets/490/
EncryptedCharField
http://djangosnippets.org/snippets/1095/
CountryField
http://djangosnippets.org/snippets/494/
Thumbnail an Image
http://djangosnippets.org/snippets/20/
JsonResponse
http://djangosnippets.org/snippets/154/

Anúncios

One Comment

  1. Interessante seu ponto de vista, eu tb acredito que muitas vezes precisamos resolver o problema com o que temos na mão.

    Eu acho que hj utilizar o MongoDB com Django acaba não sendo muito vantajoso, pois se perde muito das ferramentas do framework como o admin por exemplo. Li que existe um pessoal portando o Django para bancos NoSQL.

    Curtir

    Responder

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s