đŸ‡§đŸ‡· Porque armazenar Agregados com NoSQL ?

Arley PĂĄdua
3 min readNov 18, 2017

Com o movimento recente no uso de bancos de dados nĂŁo relacionais, muitas opçÔes de armazenamento de dados ficaram em evidĂȘncia deixando o ambiente um tanto confuso ao decidir o que usar.

Decidir qual melhor forma de armazenar o estado de seus agregados e entidades sempre dependerå da necessidade do projeto, mas não podemos ficar distantes de sempre pensar na melhor opção e balancear os prós e contras.

Gostaria de deixar uma reflexĂŁo sobre o uso NoSQL e a persistĂȘncia de Aggregates, talvez ela possa ajudar na decisĂŁo da sua arquitetura.

Para nivelarmos os conceitos, segundo Martin Fowler, um agregado Ă© agrupador de objetos do domĂ­nio, que podem ser tratados como uma unidade.

Quero iniciar a reflexĂŁo com a persistĂȘncia de bancos de dados relacionais, ressaltando que vocĂȘ terĂĄ que diluir o seu modelo de negĂłcios em tabelas, colunas e relacionamentos. Com esse tipo de persistĂȘncia, vocĂȘ sempre terĂĄ um esforço de infraestrutura para realizar a conversĂŁo entre um linhas de um banco de dados e os objetos do seu domĂ­nio, mesmo que vocĂȘ faça o uso de um ORM. TambĂ©m Ă© muito comum fazer o uso de design patterns para transformar os seus dados em um objeto relevante no seu domĂ­nio, como Ă© o caso do Factory.

Abaixo segue uma imagem do Marin Fowler que ilustra muito bem essa complexidade.

Abstração de tabelas de um agregado “Pedido” (AggregateOrientedDatabase)

Com isso conseguimos levantar trĂȘs passos para modelar um sistema com base de dados relacional: Criar tabelas e relacionamentos, definir a estratĂ©gia de recuperar os dados persistidos, definir estratĂ©gia de conversĂŁo do modelo relacional para o seu modelo de domĂ­nio.

Por outro lado, bancos de dados NoSQL oferecem uma forma mais livre e maleĂĄvel de armazenar e recuperar seus dados, devido a sua simplicidade de armazenamento em chave/valor.

Existem vårios produtos no mercado que implementam essa ideia, com pequenas variaçÔes, mas todos compartilham o mesmo conceito: Armazenamento de documentos (geralmente JSON) identificados por uma chave.

Esse modelo é ótimo para aplicaçÔes pois o armazenamento/recuperação dos dados é feita de forma nativa na maioria das linguagens, serializando o estado do agregado em JSON e convertendo de JSON para objetos.

Outro aspecto importante dessa abordagem é a escalabilidade proporcionada ao seu negócio, devido o modelo de armazenamento que pode ser distribuído em clusters de processamento. A IBM tem um ótimo artigo bem detalhado sobre esse aspecto, incluindo vårios players do mercado, que pode também ajudar a uma decisão no seu modelo.

Os efeitos colaterais desse modelo estão na forma de leitura desse dado, pois se olharmos para uma coleção de “Pedidos de Vendas” e precisarmos saber todos os pedidos em um determinado dia, ou todos os pedidos com valor total maior do que US$ 100, não teríamos uma chave bem definida para tais consultas e acabaríamos esbarrando em um “full table scan” nas consultas.

O exemplo dado acima, mostra perguntas analíticas em cima dos dados, nesse caso, tais perguntas podem ser respondidas através de uma base de dados analítica, usando Data Warehouses. Para o lado transacional, apenas ficariam açÔes transacionais, tais como, recuperar um pedido de venda, mudar o status, cancelar, etc.

Em fim, parece bem razoĂĄvel o uso de NoSQL para guardar o estado dos seus agregados, devido ao baixo custo de manutenção, escalabilidade, facilidade de implementação. A Ășnica restrição estĂĄ na forma em que vocĂȘ vai formular as perguntas ao seu modelo de dados.

Se hĂĄ algum lado que nĂŁo foi coberto nessa reflexĂŁo e que vocĂȘ acha importante compartilhar, por favor, deixe um comentĂĄrio contribuindo para a discussĂŁo.

Esse artigo tambĂ©m estĂĄ disponĂ­vel em InglĂȘs.

--

--