O mundo moderno de armazenamento de dados.
Introdução,
Modelos de dados Agregados, Modelos de Distribuição, consistência, marcadores de versão, map reduce
Banco de dados de Documentos
Banco de dados de Chave Valor
Armazenamentos em Família e Coluna
Atividades Práticas supervisionadas (APS)
Banco de dados de Grafos
Migração de Esquemas, Persistência Poliglota
Você acaba de ser contrato por uma StartUp de RH, as RHtech, (ex. Vulpi, Gupy, etc...). Você será responsável por toda a Governança de Dados do aplicativo/sistema.
Temos que desenvolver uma app para a StartUp que possa gerar, armazenar e recuperar dados de forma performática:
O Problema do Modelo Relacional
Alto volume de consultas (leitura do dados)
Alto volume de dados
Manutenção das alterações de dados
Rigidez e burocracia no modelo relacional
Imcompatibilidade de Impedância
Novos desafios
Advento da internet
"Ataque dos clusters"
Crescimento dos indicadores de negócio (KPI) e Data Warehouse
Arquitetura Micro Serviços
No SQL é "Not Only SQL"
Manifesto "precisamos atender a novas necessidades e novos modelos deaplicações, devemos possuir novas formas de armazenar os dados"
No começo, a sigla era interpretada como 'No SQL' (Não SQL, em inglês). Era um movimento contrário à utilização de um RDBMS.
Não suporta operações de Joins
# 1 - Introdução
# 1 - Introdução
Exemplo: Nota fiscal
# 1 - Introdução
Exemplo: Rede Social
# 1 - Introdução
Exemplo: Log de sistema
# 1 - Introdução
Exemplo: Corridas do "Uber"
# 1 - Introdução
O teorema afirma que os sistemas de dados distribuídos oferecerão uma compensação entre consistência, disponibilidade e tolerância à partição. E que qualquer banco de dados só pode garantir duas das três propriedades
# 1 - Introdução
Disponibilidade
# 1 - Introdução
Tolerância a partições
# 1 - Introdução
| Considere um armazenamento de dados NoSQL quando: | Considere um banco de dados relacional quando: |
|---|---|
| Você tem cargas de trabalho de alto volume que exigem latência previsível em grande escala (por exemplo, latência medida em milissegundos ao executar milhões de transações por segundo) | O volume de carga de trabalho geralmente se ajusta a milhares de transações por segundo |
| Seus dados são dinâmicos e frequentemente são alterados | Seus dados são altamente estruturados e exigem integridade referencial |
| As relações podem ser modelos de dados des normalizados | As relações são expressas por meio de junções de tabela em modelos de dados normalizados |
| A recuperação de dados é simples e expressa sem junções de tabela | Você trabalha com consultas e relatórios complexos |
| Os dados normalmente são replicados entre geografias e exigem um controle mais fino sobre consistência, disponibilidade e desempenho | Os dados normalmente são centralizados ou podem ser replicados de forma assíncrona |
| Seu aplicativo será implantado no hardware de mercadoria, como com nuvens públicas | Seu aplicativo será implantado em hardware grande e high-end |
# 1 - Introdução
Apresente uma implementação para cada tipo de aplicação de banco de dados NoSQL no contexto da StartUp RHTech.
# 1 - Introdução
APS01 - Quais modelo de dados do projeto RHTech podemos aplicar sobre os quatros principais tipos de NoSQL.
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Limitação do modelo relacional
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Uma abordagem diferente
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Exemplo: comercio eletronico
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Vamos supor que temos que construir um site de comércio eletrônico;
Podemos modelar os dados usando um armazenamento de dados de relacional ou armazenamentos de dados NoSQL
Trataremos seus prós e contras.
Exemplo: comercio eletronico
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Modelagem Relacional
Exemplo: comercio eletronico
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Um exemplo de povoamento.
Veja esta tudo normalizado
Exemplo: comercio eletronico
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Modelo NoSQL
Aqui temos
2 agragados
Exemplo: comercio eletronico
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Um exemplo de povoamento.
// in customers
{
"id": 1,
"name": "Martin",
"billingAddress": [
{
"city": "Chicago"
}
]
}
// in orders
{
"id": 99,
"customerId": 1,
"orderItems": [
{
"productId": 27,
"price": 32.45,
"productName": "NoSQL Distilled"
}
],
"shippingAddress": [
{
"city": "Chicago"
}
]
"orderPayment": [
{
"ccinfo": "1000-1000-1000-1000",
"txnId": "abelif879rft",
"billingAddress": {
"city": "Chicago"
}
}
],
}Consequencia da orientação a agregados
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Pontos importamtes
# 1 - Modelos de dados Agregados, Modelos de Distribuição
# 1 - Modelos de dados Agregados, Modelos de Distribuição
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Beneficios
Modelos de implantação
Fragmentação
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Um armazenamento de dados pode ficar muito ocupado, pois várias pessoas estão acessando partes diferentes do conjunto dos dados.
Nessas circunstâncias a fragamentação (sharding), dÁ suporte a escalabilidade horizontal, colocando partes diferentes dos dados em servidores diferentes.
Fragmentação
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Replicação Mestre-escravo
# 1 - Modelos de dados Agregados, Modelos de Distribuição
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Replicação Mestre-escravo
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Ponto de Atenção
Replicação Mestre-escravo
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Problema:
Replicação Mestre-escravo
Replicação Ponto a ponto (P2P)
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Visão Geral
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Visão Geral
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Visão Geral
# 1 - Modelos de dados Agregados, Modelos de Distribuição
Apresente uma implementação em alguma parte da modelagem relacional com modelo agregado documental. Ex. um JSON do reistro ponto.
# 1 - Introdução
APS02 - Como pode ser um modelo da dados agragados (NoSQL) para a modelagem relacional proposta inicialmente para nossa App?
# 1 - Introdução
APS02.b - Configurar cluster Amazon DocumentDB e conectar com Robo 3T
Vamos criar um banco documental para a app/sistema usando como base o resultado do passo anterior.
# 2 - Banco de dados de Documentos
Visão Geral
# 2 - Banco de dados de Documentos
Características
# 2 - Banco de dados de Documentos
# 2 - Banco de dados de Documentos
Características
Características
db.runCommand({ getlasterror : 1 , w : "majority" })
w com valor majority -> persistencia imediata
se o cluster tiver mais de uma nó, a persistencia deverá ser completa em pelo menos n-1 nós
mongo.slaveOk()
# 2 - Banco de dados de Documentos
Características
Uma gravação é bem-sucedida ou falha. Transações no nível de um único documento são conhecidas como transações atômicas.
Transações envolvendo mais de uma operação não são possíveis
# 2 - Banco de dados de Documentos
Características
# 2 - Banco de dados de Documentos
Características
SELECT * FROM order
db.order.find()
SELECT orderId,orderDate FROM order WHERE customerId = "883c2c5b4e5b"
db.order.find({customerId:"883c2c5b4e5b"},{orderId:1,orderDate:1})
# 2 - Banco de dados de Documentos
Características
# 2 - Banco de dados de Documentos
Quando não usar
# 2 - Banco de dados de Documentos
# 1 - Introdução
APS03 - Configurar cluster Atlas e conectar com Robo 3T
Vamos criar um banco documental para a app/sistema usando como base o resultado do passo anterior.
# 1 - Introdução
APS03.b - Desafio: Configurar App Django e conectar com cluster Atlas
Connectar App Django com cluster Atlas MongoDB e criar tela de registro ponto - persistindo ponto no cluster.
# 3 - Banco de dados de Chave Valor
# 3 - Banco de dados de Chave Valor
Visão Geral
# 3 - Banco de dados de Chave Valor
Tabela hash
# 3 - Banco de dados de Chave Valor
Características
# 3 - Banco de dados de Chave Valor
A consistência é aplicável apenas para operações em uma única chave
O modelo de consistência é implementado é o de Consistencia Eventual
Há duas maneiras de resolver conflitos de atualização:
ou a gravação mais recente vence e as gravações mais antigas são liberadas,
ou ambos (todos) os valores são retornados, permitindo que o "cliente" resolva o conflito.
Uma gravação só é considerada boa apenas quando os dados são consistentes em todos os nós onde os dados estão armazenados.
Características
# 3 - Banco de dados de Chave Valor
Diferentes implementações de bancos de dados chave valor têm diferentes tipos de especificações de transações
De um modo geral, não há garantias sobre as gravações.
As transações Redis permitem a execução de um grupo de comandos em um único passo
As transações Redis oferecem duas garantias importantes:
Todos os comandos em uma transação são serializados e executados sequencialmente.
O comando EXEC aciona a execução de todos os comandos na transação
Características
# 3 - Banco de dados de Chave Valor
Todos os armazenamentos de chave valor podem consultar pela chave
- e isso é (quase) tudo!
O cliente precisa ler o valor para descobrir se o atributo atende às condições
É muito importante projetar um esquema bem elaborado para a chave.
Porem no Redis existe algumas estratégias diferentes
Características
# 3 - Banco de dados de Chave Valor
Muitos bancos de dados chave valore são dimensionados usando fragmentação
Para a fragmentação, o nome da chave pode determinar qual nó nó a chave deve ser armazenada pelo valor da chave
A fragmentação também apresenta alguns problemas. Se o nó usado para armazenar f ficar inativo, os dados armazenados nesse nó ficam indisponíveis, e novos dados podem ser gravados com chaves que começam com f.
Quando não usar
# 3 - Banco de dados de Chave Valor
Relacionamento entre dados
Transações de várias operações
Consulta complexas por dados
Operações por conjuntos (joins)
APS04 - Configurar cluster Redis Cloud e conectar com RedisInsight Desktop Client
Vamos criar um banco chave valor para a app.
# 3 - Banco de dados de Chave Valor
APS04.b - Desafio: Conectar app Django ao com cluster Redis.
Conectar App Django com cluster Redis Lab e criar tela de listagem de registro ponto - persistir e recuperar ponto.
# 3 - Banco de dados de Chave Valor
# 4 - Armazenamentos em Família e Coluna
Visão Geral
# 4 - Armazenamentos em Família e Coluna
Características
# 4 - Armazenamentos em Família e Coluna
{
name: "fullName",
value: "Martin Fowler",
timestamp: 12345667890
}Características
# 4 - Armazenamentos em Família e Coluna
//column family
{
//row
"pramod-sadalage": {
"firstName": "Pramod",
"lastName": "Sadalage",
"lastVisit": "2012/12/12"
},
//row
"martin-fowler": {
"firstName": "Martin",
"lastName": "Fowler",
"location": "Boston"
}
}Características
# 4 - Armazenamentos em Família e Coluna
Características
# 4 - Armazenamentos em Família e Coluna
Quando uma gravação é recebida pelo Cassandra, os dados são registrados primeiro em um commit log, em seguida, gravados em uma estrutura de memória conhecida como memtable.
Uma operação de gravação é considerada bem-sucedida quando é gravada no log de confirmação e na memtable.
As gravações são agrupadas na memória e periodicamente gravadas em estruturas conhecidas como SSTable.
Características
# 4 - Armazenamentos em Família e Coluna
ONE: quando uma solicitação de leitura for feita, o Cassandra retornará os dados da primeira réplica, mesmo que os dados estejam obsoletos. O baixo nível de consistência é bom para usar quando você não se importa se obter dados obsoletos e/ou se precisar de um alto desempenho de leitura
QUORUM:para operações de leitura e gravação garante que a maioria dos nós responda à leitura e a coluna com a marcação timestamp mais recente seja retornada ao cliente. Nesse modelo a gravação deve ser propagada para a maioria dos nós antes de ser considerado bem-sucedida
ALL: significa que todos os nós terão que responder a leituras ou gravações, o que tornará o cluster não tolerante a falhas, mesmo quando um nó estiver inativo, a gravação ou leitura será bloqueada e relatada como uma falha.
Características
# 4 - Armazenamentos em Família e Coluna
No Cassandra, uma gravação é atômica em relação a linha, o que significa que inserir ou atualizar colunas para uma determinada chave de linha será tratada como uma única gravação e terá êxito ou falha.
Se um nó ficar indisponível, o commit log é usado para aplicar alterações no nó.
Características
# 4 - Armazenamentos em Família e Coluna
A disponibilidade de um cluster pode ser aumentada reduzindo o nível de consistência das solicitações
A disponibilidade é regida pela fórmula (R + W) > N onde
W é o número mínimo de nós em que a gravação deve ser gravada com êxito
R é o número mínimo de nós que devem responder com êxito a uma leitura
N é o número de nós que participam da replicação de dados.
Para ajustar o nível de disponibilidade é só alterar os valores R e W para um valor fixo de N
Dessa forma podemos deixar os keyspace com maior disponibilidade para gravação ou maior disponibilidade para leitura.
Características
# 4 - Armazenamentos em Família e Coluna
O Cassandra não possui uma rica linguagem de consulta
Conforme os dados são inseridos nas famílias de colunas, os dados em cada linha são classificados pelos nomes das colunas.
Se tivermos uma coluna que é recuperada com mais frequência do que outras colunas, é melhor usar esse valor para a chave de linha.
Obter uma coluna específica é mais eficiente, pois apenas os dados necessários são retornados, isso ajuda a economizar o movimento de dados dentro do banco, especialmente quando a família de colunas tem um grande número de colunas.
Características
# 4 - Armazenamentos em Família e Coluna
Cassandra possui uma linguagem de consulta que suporta comandos do tipo SQL, chamada Cassandra Query Language (CQL)
Podemos usar os comandos CQL para criar e manipular uma família de colunas
-- Create a column family
CREATE COLUMNFAMILY Customer (
KEY varchar PRIMARY KEY,
name varchar,
city varchar,
web varchar);
-- Insert the same data using CQL
INSERT INTO Customer (KEY,name,city,web)
VALUES ('mfowler',
'Martin Fowler',
'Boston',
'www.martinfowler.com');
-- SELECT the columns we need
SELECT name,web FROM CustomerCaracterísticas
# 4 - Armazenamentos em Família e Coluna
Escalar um cluster Cassandra é somente uma questão de adicionar mais nós - Escalabilidade horizontal.
Este tipo de dimensionamento horizontal permite que tenhamos o máximo de tempo de atividade
Quando não usar
# 4 - Armazenamentos em Família e Coluna
Sistemas que exigem transações ACID para gravações e leituras
Atomicidade, Consistência, Isolamento e Durabilidade
Cassandra não é recomendados para protótipos iniciais ou adoções tecnológicos iniciais, pois nestes projetos o design do banco família de colunas pode mudar constantemente.
Links
# 4 - Armazenamentos em Família e Coluna
Cluster free in Cloud de Cassandra
# 5 - Banco de dados de Grafos
Visão Geral
# 5 - Banco de dados de Grafos
Visão Geral
# 5 - Banco de dados de Grafos
Visão Geral
# 5 - Banco de dados de Grafos
Visão Geral
# 5 - Banco de dados de Grafos
Visão Geral
# 5 - Banco de dados de Grafos
Node martin = graphDb.createNode();
martin.setProperty("name", "Martin");
Node pramod = graphDb.createNode();
pramod.setProperty("name", "Pramod");
// create relationship between the nodes in both direction
martin.createRelationshipTo(pramod, FRIEND);
pramod.createRelationshipTo(martin, FRIEND);Visão Geral
# 5 - Banco de dados de Grafos
Características
# 5 - Banco de dados de Grafos
Dentro de um único servidor, os dados são sempre consistentes
Neo4J é totalmente compatível com ACID.
Ao executar o Neo4J em um cluster, uma gravação no mestre é eventualmente sincronizada com os escravos, enquanto os escravos estão sempre disponíveis para leitura
Caracterizando a Consistência Eventual
Características
# 5 - Banco de dados de Grafos
Neo4J é compatível com ACID
Marcamos a transação como bem-sucedida (success) e finalmente a completamos com um finish.
Uma transação precisa ser marcada como bem-sucedida, senão o Neo4J supõe que ela falhou e a desfaz quando o comando fnish for executado.
Essa maneira de gerenciar transações deve ser lembrada durante o desenvolvimento, uma vez que difere do modo padrão de executar transações em um SGBD.
Características
# 5 - Banco de dados de Grafos
O Neo4J alcança alta disponibilidade fornecendo escravos replicados.
Os escravos podem lidar com gravações: eles sincronizam a gravação com o mestre atual e a gravação é confirmada primeiro no mestre e depois no escravo
O Neo4J usa o Apache ZooKeeper para acompanhar os últimos IDs de transação persistidos em cada nó escravo e no nó mestre atual
Características
# 5 - Banco de dados de Grafos
O Neo4J possui uma linguagem de consulta chamada Cypher para consultar o grafo.
Neo4J permite consultar o grafo para propriedades dos nós, percorrer o grafo ou navegar pelos relacionamentos dos nós usando suas ligações.
Encontrar nós e suas relações imediatas pode ser feito em bancos de dados relacionais. quala diferença?
Os bancos de dados de grafos são poderosos quando precisamos percorrer os grafos em qualquer profundidade e especificar um nó inicial para a travessia.
À medida que a profundidade do gráfico aumenta, faz mais sentido percorrer os relacionamentos usando um Traverser, permitindo possamos explorar estruturas de árvore
Características
# 5 - Banco de dados de Grafos
START beginingNode = (beginning node specification)
MATCH (relationship, pattern matches)
WHERE (filtering condition: on data in nodes and relationships)
RETURN (What to return: nodes, relationships, properties)
ORDER BY (properties to order by)
SKIP (nodes to skip from top)
LIMIT (limit results)Características
# 5 - Banco de dados de Grafos
Para bancos de dados de grafos, a fragmentação é difícil, pois os bancos de dados de grafos não são orientados por agregação, mas por relacionamento.
Como qualquer nó pode ser relacionado a qualquer outro nó, armazenar nós relacionados no mesmo servidor é melhor para a travessia do grafo.
Percorrer um gráfico quando os nós estão em máquinas diferentes não é bom para o desempenho.
Quando o tamanho do conjunto de dados torna a replicação impraticável, podemos fragmentar os dados do lado do aplicativo usando conhecimento específico do domínio.
Características
# 5 - Banco de dados de Grafos
Quando usar
# 5 - Banco de dados de Grafos
Dados conectados - Redes sociais
Roteamento - serviços de localização
uma origem e um destino - um caminho
Mecanismos de recomendação
identifica caracteristicas semelhantes
arestas com ligações parecidas
Quando não usar
# 5 - Banco de dados de Grafos
Quando você deseja atualizar todas ou um subconjunto de entidades,
Por exemplo:
em uma solução de análise em que todas as entidades podem precisar ser atualizadas com uma propriedade alterada, pois alterar uma propriedade em todos os nós não é uma tarefa simples.
Links
# 5 - Banco de dados de Grafos
Cluster free in Cloud de Neo4j
# 6 - Migração de Esquemas, Persistência Poliglota
# 6 - Migração de Esquemas, Persistência Poliglota
# 6 - Migração de Esquemas, Persistência Poliglota
# 6 - Migração de Esquemas, Persistência Poliglota
# 6 - Migração de Esquemas, Persistência Poliglota
# 6 - Migração de Esquemas, Persistência Poliglota