Migração de PostgreSQL para MongoDB (Grails)
26/01/2016 15:55
2
Estimados,

Encontro-me em um projeto no qual utilizamos Hibernate 3, PostgreSQL e Grails. No entanto, encontramo-nos frente alguns problemas de gargalo no sistema, especialmente ao Banco de Dados.

Existe a proposta de mudarmos para o esquema NoSQL utilizando o MongoDB. Existem várias promessas neste sentido, mais velocidade, livre de esquemas com entidades únicas, etc.

Mediante testes e alguns estudos, verificamos que há um plugin do grails de conexão com o MongoDB, porém não há o suporte para o Hibernate, tendo-se apenas o GORM básico funcionando. Dos estudos mais recentes, verificamos que o nosso sistema utiliza 99% de queries HQL do Hibernate. Isto é, ao se trocar para o MongoDB mesmo com o plugin citado não é possível se fazer uso destas queries, teríamos que reescrever todas as consultas, praticamente.

Frente a isto, há a promessa do Hibernate-OGM, uma interface do Hibernate voltada para NoSQL, e que possui um driver de conexão com o MongoDB, no qual classes são mapeadas para o modelo não-relacional do Mongo. No entanto, não há plugins para o hibernate-OGM disponíveis para o Grails. 

Saberiam me informar algumas sugestões para alguns destes problemas??
Tags: Grails, Mongodb, PostgreSQL, Hibernate


2
Oi Pedro Victor,

se o sistema de vocês faz forte uso de integridade referencial, não recomendo que vocês façam esta migração. Nas experiências que já presenciei em que este tipo de mudança foi realizado e a integridade referencial era necessária, o que normalmente vi foram desastres. Basicamente vocês acabarão tendo de reimplementar integridade referencial na unha, o que não é uma boa ideia.

Outro ponto importante a ser levado em consideração: o sistema de vocês executa transações que envolvam mais de uma tabela/registro? Se sim, no MongoDB, até aonde sei, você só tem transações em um único documento. Este é outro ponto que invalida este tipo de migração. A não ser que você estude outra opção para o MongoDB como, por exemplo, o TokuMX, que é completamente compatível com o MongoDB e oferece este recurso (https://www.percona.com/software/mongo-database/percona-tokumx). 

Sei que o MongoDB está na versão 3.0 agora e que teve diversas melhorias, mas não sei se estes dois pontos foram resolvidos: acredito que não, pois ele não é um banco de dados relacional.

O HQL realmente não irá funcionar nativamente no MongoDB, pois foi feita com o Hibernate em mente (daí o H no nome), e quanto ao Hibernate OGM, não tive experiências com ele pra poder te dar um feedback melhor a respeito do produto.

Um ponto interessante pra você levar em consideração se estiver realmente querendo migrar para o NoSQL: o PostgreSQL uns dois anos atrás mostrou alguns benchmarks com dados no formato JSON que superavam o MongoDB. Já pesquisou por este lado? Outro ponto legal que pode ajudar demais no seu projeto: contrate um DBA freelancer para analisar a situação: muitas vezes eles conseguem detectar problemas de de sempenho que nós, desenvolvedores, não conseguimos ver com clareza.


0
Muito interessante essa opção do Postgres de manipular JSON, inclusive estive pensando em fazer isso quando estava olhando uma opção de auditoria (http://www.grailsbrasil.com.br/post/show/3101) e na ocasião estava pensando em usar um tipo texto mesmo, este tipo JSON e JSONB trazem novas possibilidades para o BD, valeu Kico!
27/01/2016 11:23


1
Dá uma olhada nesse vídeo, vários argumentos para preferir o JsonB ao varchar ou json no postgresql:
http://www.infoq.com/br/presentations/postgresql-o-que-mais-vem-por-ai?utm_source=infoq&utm_medium=videos_homepage&utm_campaign=videos_row2
04/02/2016 16:04



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto