O aumento da complexidade e evolução dos softwares nos leva a querer melhores formas de consultar e inserir informações. Atualmente existem dois modelos de armazenamento de dados: noSQL e Relacional, o primeiro devido ao alto desempenho na manipulação de grandes quantias de dados está presente nas aplicações de empresas de sucesso mundial como as de redes sociais, e-commerce,etc, e o segundo amplamente utilizado por ser seguro e confiável. Diante dessas informações é comum ter dúvida de qual modelo utilizar. Nessa palestra você aprenderá sobre persistência poliglota que propõe a coexistência de vários modelos na mesma aplicação e demonstraremos um case de uso em um e-commerce.
Entenda como as grandes empresas utilizam múltiplas abordagens de armazenamento de dados de forma eficiente
1. Entenda como as grandes empresas
utilizam múltiplas abordagens de
armazenamento de dados de forma
eficiente
2. Olá!
Eu sou Leonardo Farias
Tech Manager no Banco Inter, Msc em
Informática Aplicada pela UFRPE,
consultor, professor universitário na AESO
e palestrante.
leoroberto@gmail.com
leonardofarias.pro.br
Vocês podem me encontrar em:
7. Banco de dados
de Documentos
Banco de dados
de Chave e Valor
Banco de dados
de Grafos
Banco de dados
de Família de
Coluna
8. Conjunto de dados (Interação Unidade)
Agrupados como devem ser acessados
Facilitam o Gerenciamento em clusters
Utilizado pelos BDS: chave e valor,
documentos e família de colunas
Orientação a Agregados
12. Armazena documentos (XML, JSON, etc)
Consulta dados dentro dos atributos.
Agregados / Visões materializadas
Banco de Dados de Documentos
13. Casos apropriados para
uso
Registro de eventos (log)
Gerenciamento de Conteúdo (CMS), plataformas
de blog
Análises web ou em tempo real (analytics)
Aplicativos de e-commerce (Esquemas flexíveis
para produtos e pedidos)
Quando não usar
Transações complexas que abranjam diferentes
operações (em multiplos documentos)
Consultas em estruturas agregadas variáveis.
Banco de Dados de Documentos
14. É uma Tabela hash simples.
Acesso é feito por meio da chave primária.
Altamente escalável
Banco de Dados Chave e Valor
🔑
🔑
🔑
🔑
15. Casos apropriados para uso
Armazenando informações de sessão.
Perfis de usuários, preferências.
Dados de carrinhos de compras.
Quando não usar
Relacionamento entre dados.
Transações com múltiplas operações.
Consulta por dados nos valores.
Operações por conjuntos.
Banco de Dados Chave e Valor
🔑
16. Banco de Dados Família de Colunas
Armazena em linha, pares de chave e valor
Grupos de dados acessados em conjunto
Mantém dados relacionados juntos
👪
🔑
🔑
🔑
19. Casos apropriados
para uso
Registro de eventos (log)
Gerenciamento de Conteúdo (CMS),
plataformas de blog
Quando não usar
Quando necessário uso de transações
ACID (consultas com SUM e AVG).
Alto custo para alterar/mudar as
consultas CQL
Banco de Dados Família de Coluna
👪
20. Banco de Dados Grafos
Possibilita encontrar padrões
Podemos percorrer como quiser
Dados interpretados de várias formas
Significância direcional arestas
👪
👪
👪
👪
22. Casos apropriados
para uso
Dados conectados (Qualquer domínio rico
em links)
Roteamento, envio e serviços baseados
em localização
Mecanismos de recomendações
Quando não usar
Atualizações em lote (grande número de
entidades atualizadas de uma vez)
Banco de Dados de Grafos
25. Cada BD tem sua característica
+1 BD pode
ser a solução
Depende do
cenário um
BD pode ser
melhor que o
outro
BDs
Relacionais
devem ser
considerados
27. “
Martin Fowler
Uso de várias tecnologias de armazenamento de dados,
escolhidas com base na maneira como os dados estão
sendo usados por aplicativos individuais.
28.
29. Caso de Uso
- Parte mais pesada da App
- Produtos possuem atributos diferentes
- Consultas rápidas
BD de Documentos
- Eliminar joins e inner joins
- Consultas mais rápidas
(agregados)
- Estrutura elástica
- Sessão temporária (cód produto)
- Deixa de existir no final
- Não precisa persistir o dado
- Dados simples, podem ficam na
memória.
BD Chave-valor
- Não gera I/O disco
- Mantem os dados na memória
- ID da sessão e um dicionário
(produtos e qtds)
Catálogo de
Produto Carrinho de
Compras
Recomendações
De Produtos
Dados dos clientes e
Pagamentos
- Recomendações de outros
baseado em outros usuários e
outros parâmetros.
- “Seus amigos compraram esse
produto”
- Parte mais crítica e sensível dos dados
- Possui muitos relacionamentos
BD de Grafos
- Comportamentos são
armazenados e servirão de
indicação posterior.
BD Relacional
- Amplamente utilizado
- Geralmente homologados
e certificados.
30. Dicas de como escolher o BD
Dica 1
Dividir para conquistar... Selecione
cenários mais comuns, dependentes
de desempenho e que não parecem
se adaptar ao modelo atual.
Dica 2
Observe os recursos atuais e veja
como o uso dos dados é apropriado.
Dica 3
Faça experiências criando um
software, experimente os BDs (BDs
relacionais devem ser
considerados)!
Dica 4
A única forma pela qual você pode
avaliar o desempenho
apropriadamente é criando algo,
executando e testando!
Dica 5
Você precisará criar cargas e
volumes de dados representativos.
Dica 6
Se necessário, permaneça com o
padrão.
Boa tarde pessoal, hoje vou falar sobre...
Como escolher quais bancos de dados usar em uma determinada solução de armazenamento poliglota?
Vamos iniciar falando sobre as diferenças entre BDs Relacionais e NoSQL
Essa palestra é fruto de um estudo que ainda está em andamento e baseando em minha experiência profissional.
Banco de dados NoSQL são bases de dados que foram criados para manipular dados semi e não estruturados, com velocidade, flexibilidade e escalabilidade. Eles foram criados para suprir uma demanda na qual os bancos de dados relacionais não foram capazes de atender. O acrônimo NoSQL quer dizer “Not Only SQL” (Não apenas NoSQL) e por muito tempo acreditou-se que esta sigla estava ligada a expressão No SQL (Não SQL) na qual passava a ideia de que os bancos de dados NoSQL vieram para tomar o lugar dos bancos de dados relacionais. Porém diferentemente disso, os bancos de dados NoSQL podem ser encarados como mais uma ferramenta que pode ser agregada as demais existentes.
os bancos de dados NoSQL se dividem em 4 categorias: documentos, chave e Valor, família de colunas e grafos. Cada banco de dados NoSQL foi criado para resolver um determinado tipo de problema, manipulando e armazenando os dados de formas distintas, porém com características comuns:
Ausência de modelagem: Estes bancos de dados dispensam modelagem prévia dos seus dados, permitindo a inclusão dos dados de forma livre, sem mudança prévia na sua estrutura;
Escalável e consistente: bancos NoSQL foram criados especialmente para trabalharem de forma escalável, diferentemente do modelo relacional que apenas escalam de forma horizontal, as bases de dados NoSQL podem escalar de forma vertical, isso quer dizer que é totalmente possível adicionar servidores em paralelo para aumentar a disponibilidade e velocidade, além do mais os bancos de dados NoSQL dispõem de dispositivos que fazem com que os dados sejam consistente mesmo com o uso de vários servidores em paralelo.
Bancos de dados NoSQL são livres de modelagem por necessidade, porém a não modelagem reflete na necessidade mínima de organização das informações para trafegá-las entre aplicação e base de dados NoSQL.
O modelo de agregados é uma forma de organizar o conjunto de informações que serão trafegados entre a aplicação e os bancos de dados de documentos, chave e valor e família de colunas. O agregado é um conjunto de dados que devemos considerar como uma unidade.
Agregado é um conjunto de objetos relacionados tratados como uma unidade. Trabalhar com agregados revela-se útil principalmente em execução em um cluster, já que dados representados por modelos agregados se constitui em unidade natural para replicação e fragmentação.
Vamos fazer um paralelo com um exemplo do mundo real.
Imagine que estamos acessando uma tela web no qual temos as informações de um usuário, os itens de sua última compra e método de pagamento.
Ao consultar em um banco relacional, essas informações estarão em tabelas separadas e serão recuperadas pelo SGBD através de junções dessas informações e posteriormente envio destas de forma agrupada.
O mesmo ocorre na inclusão dessas informação no banco de dados relacional, os dados chegam agrupados e devem ser quebrados para serem inseridos em suas respectivas tabelas. Em ambos os casos o SGDB teve um custo de processamento alto para realizar as respectivas junções e as quebras das informações.
Vamos fazer um paralelo com um exemplo do mundo real.
Imagine que estamos acessando uma tela web no qual temos as informações de um usuário, os itens de sua última compra e método de pagamento. Ao consultar em um banco relacional, essas informações estarão em tabelas separadas e serão recuperadas pelo SGBD através de junções dessas informações e posteriormente envio destas de forma agrupada.
O mesmo ocorre na inclusão dessas informação no banco de dados relacional, os dados chegam agrupados e devem ser quebrados para serem inseridos em suas respectivas tabelas. Em ambos os casos o SGDB teve um custo de processamento alto para realizar as respectivas junções e as quebras das informações.
Os bancos de dados baseados em documentos são bases de dados que armazenam coleções de documentos no formato JSON, XML, BSON entre outros. Estes documentos possuem propriedades do tipo (chave : valor), onde os valores da propriedade podem ser de tipos variados (texto, inteiro, etc). Os documentos que são armazenados nesse banco de dados agrupam informações de um mesmo assunto e devem possuir todas as informações necessárias do assunto tratado, ou seja, não dependendo de outro documento para montar o conjunto de informação final, com isso é normal existir repetições de informações dentro do mesmo documento.
Tem como características a possibilidade de armazenar documentos que não possuem a mesma estrutura e também permitir a consulta de dados dentro pelos seus atributos. Um exemplo bastante citado é o armazenamento de produtos de uma loja virtual, no qual podemos armazenar diversos produtos com características distintas. No exemplo ao lado temos dois documentos que fazem parte da mesma coleção, porém que possuem atributos distintos.
Os bancos de dados NoSQL baseados em documentos são indicados para uso de aplicações ou parte destas que precisem armazenar dados com esquema flexível e com dados que precisem de atualização e ou consultas constantes.
Estes bancos de dados não são indicados para uso quando necessários realizar consultas em vários documentos para realização de relacionamentos entre os documentos.
Os bancos de dados NoSQL de chave e valor armazenam os seus dados de forma muito simples. De forma direta eles são divididos em registros que possuem uma chave (identificador único) e esse id está ligado diretamente ao um valor especifico. Este valor armazenado pode conter qualquer tipo de dados, desde JSON, números, cadeia de caracteres, entre outros. Diferentemente dos bancos de dados de documentos, as bases de dados de chave e valor não manipulam diretamente os dados contidos nos valores, ou seja, não é possível consultar os dados pelo valor ou parte dele. As pesquisas são feitas diretamente pela chave do registro e o valor como um todo é retornado.
Outra característica importante dos bancos de dados de chave e valor é que eles podem armazenar os dados tanto em disco quanto em memória, este segundo pode melhorar consideravelmente a performance na manipulação dos dados.
Por serem extremamente rápidos eles são indicados para se trabalhar com dados de carrinho de compras de uma loja virtual (onde os produtos adicionados estão ligados ao id do usuário), informações da sessão/ perfil do usuário, entre outros. Este bd não é indicado se for necessário: Relacionar os dados entre os registros; Consultar por dados nos valores; Entre outros.
Os bancos de dados de família de colunas são bases de dados que salvam as suas informações em colunas que são totalmente independentes umas das outras, diferentemente dos bancos de dados relacionais em que as colunas estão contidas dentro de uma tabela específica.
As colunas dos BDs de família de colunas estão agrupadas por uma chave que forma um registro, por sua vez um conjunto de registros formam as famílias de colunas.
As principais diferenças entre este tipo de banco de dados em relação ao modelo relacional são:
Os registros da família de colunas não precisam possuir os mesmos números/tipos de colunas;
A consulta buscam diretamente as colunas necessárias evitando o carregamento da tabela por inteiro (como o modelo relacional faz).
Possuem vários benefícios como: Indexação das colunas, melhorando a performance das consultas, capacidade de atualização de uma colunas sem a necessidade de atualizar as demais.
Estes BDs podem ser utilizados para trabalhar com logs de eventos, blogs e CMS e devem ser evitados caso o use para poucas informações ou que haja mudanças frequentes na aplicação devido ao alto custo para mudan;ca nas consultas.
Os bancos de dados de grafos é um tipo de bd muito interessante, no qual trabalha muito fortemente as relações entre os dados.
Ele possui esse nome por que os dados são armazenados em nós que se conectam através de arestas formando um grafo.
Os nós e as arestas podem conter propriedades que armazenam informações e as arestas possuem direção, dando sentido aos relacionamentos.
O banco de dados de grafo possibilita encontrar padrões, permitindo percorre-lo da forma que quisermos interpretando os dados de várias formas.
Esses bds são muito usados em aplicações de redes sociais, recomendações de produtos e de navegação.
No exemplo do grafo ao lado é possível encontrar facilmente qual o restaurante japonês em NY baseado no gosto de amigos.
Este tipo de banco de dados foi criado para trabalhar muito bem com dados relacionados, tendo uma performance alta quando necessário percorrer os relacionamentos.
Devido as essas características os casos indicados para uso desses bancos de dados devem observar se os dados que serão armazenados são ricos em relacionamentos como aplicações que usam rotas, localização ou mecanismos de recomendação. Evitar usar bds de grafos caso seja necessário trabalhar com um grande número de atualizações nas relações.