Mostrando postagens com marcador mongodb. Mostrar todas as postagens
Mostrando postagens com marcador mongodb. Mostrar todas as postagens

20 junho 2010

MongoDB na Ahgora

Depois de várias experiências de uso de armazenamento de dados na plataforma S3 e SimpleDB da Amazon, nós na Ahgora acabamos decidindo pelo uso do MongoDB.

Desde o ano passado já tínhamos decidido abandonar a estruturação convencional de dados por um banco relacional convencional e caminhar para uma modelagem mais simples orientada a documentos.

Nossa idéia era utilizar o S3 como um "document store" e o SimpleDB como uma maneira de indexação simples dos documentos e de vetores de dados que precisassem de busca rápida.

Os serviços S3 e SimpleDB da Amazon são bem feitos e muito confiáveis, implementando mecanismos poderosos de redundância e com escalabilidade massiva, mas dois pontos complicam seu uso: a consistência eventual e as ferramentas de acesso e depuração um tanto complicadas.

A consistência eventual dá para lidar simplesmente evitando a tentativa de reler imediatamente o dado que acabou de escrever ou por cache local ou por temporização forçada. Já a falta de ferramentas simples de depuração e acompanhamento dificulta bastante.

Estávamos usando as extensões do Firefox S3Fox e SDBTool, mas eles não são ferramentas rápidas e são complicadas de lidar quando se tem plataformas separadas de teste e produção, além de depender de conectividade constante para cada ciclo de teste.

Tentando buscar uma alternativa que pudesse nos ajudar a acelerar o desenvolvimento e simplificar os conceitos, começamos a olhar os "document stores" (CouchDB/MongoDB) e "key-value stores" (Riak/Redis) que estão em voga na Internet.

Coincidentemente observamos um crescimento muito acentuado do uso do MongoDB neste início de ano, o que incentivou uma prototipação interna para uma parte do sistema da Ahgora.

A prototipação foi um sucesso e observamos que usando o MongoDB conseguimos unificar as demandas para S3 e SimpleDB a apenas um mecanismo de armazenamento de dados.

Fora isso, ele possui uma interface de linha de comando que lembra a interface de linha de comando do MySQL, permitindo manipulação simples e rápida dos dados, mesmo em nossos notebooks, com ou sem conectividade para a Internet.

A instalação é simples e dá para começar a brincar em 10 minutos em seu computador. Pelo browser dá para brincar em 10 segundos pelo link: http://try.mongodb.org/.

A documentação não é perfeita, mas é muito melhor do que a disponibilizada para as plataformas da Amazon. Inclusive apresentando documentações extensivas para várias linguagens de programação diferentes.

A modelagem de dados é diferente com um "document store" devido a flexibilidade permitida. O item mais importante da modelagem é descobrir como o dado vai ser lido e escrito, e tentar modelar os documentos o mais próximo destes ciclos de leitura e escrita. Só brincando mesmo para entender o impacto, e o MongoDB permite brincar rapidamente e testar as alternativas.

Semanas atrás conseguimos concluir a mudança completa do nosso sistema de gestão de controle de ponto para o MongoDB. Foi muito mais fácil que pensávamos, já que já estávamos com vários dados modelados como documentos.

A principal desvantagem desta troca é que perdemos a escalabilidade e redundância nativa da Amazon e temos que manter nossas estruturas próprias de redundância entre servidores. Entretanto o MongoDB possui mecanismos bons para replicação, e bem mais simples que do MySQL.

Obs: No Slideshare tem uma apresentação ótima para uma primeira visita ao MongoDB.