Escolar Documentos
Profissional Documentos
Cultura Documentos
• Introdução
• Modelos de Dados de BD NoSQL
Sistemas NoSQL • Modelos de Distribuição
(BD de Agregados) • Consistência
• Map-reduce
Valéria Cesário Times
vct@cin.ufpe.br
• BD Chave-valor
• BD de Família de Colunas
• BD de Documentos
CIn/UFPE - DW 1 CIn/UFPE - DW 2
CIn/UFPE - DW 3 CIn/UFPE - DW 4
1
Introdução a Sistemas NoSQL Introdução a Sistemas NoSQL
• Incompatibilidade de Impedância • BD de integração x BD de aplicativos
Na década de 1990, houve o crescimento de LP OO e com
elas, surgiram os SGBD OO Por que SGBDR prevaleceram sobre SGBDOO?
• Mas enquanto o uso de LP OO cresceu, os SGBD OO • Uso de SQL como mecanismo de integração entre as
caíram na obscuridade aplicações
Frameworks de mapeamento objeto-relacional facilitaram
a convivência com a incompatibilidade de impedância
BD de integração: várias aplicações desenvolvidas por
• Exemplo: Hibernate e iBATIS equipes distintas armazenam seus dados num único local
• Implementam padrões de mapeamento conhecidos e • Melhora a comunicação porque as aplicações operam sobre
poupam as pessoas de trabalho mas seu uso incorreto pode um conjunto consistente de dados persistentes
comprometer o desempenho do sistema
• Possui algumas desvantagens....
SGBD relacionais dominaram o mercado na década de
2000, mas alguns problemas começaram a surgir em seu
domínio
CIn/UFPE - DW 7 CIn/UFPE - DW 8
CIn/UFPE - DW 9 CIn/UFPE - DW 10
2
Introdução a Sistemas NoSQL Introdução a Sistemas NoSQL
• O que é a persistência poliglota? • Motivos principais para adotar BD NoSQL:
Consiste em usar diferentes armazenamentos de dados Simplifica o acesso ao BD, mesmo que não haja a
em diferentes circunstâncias necessidade de escalar para além de uma única máquina
• Corresponde a uma mistura de tecnologias de armazenamentos
de dados para diferentes situações
Melhora a produtividade de desenvolvimento de
aplicativos usando um estilo de interação de dados mais
É preciso entender a natureza dos dados a serem conveniente
armazenados e como serão manipulados
CIn/UFPE - DW 13 CIn/UFPE - DW 14
CIn/UFPE - DW 17 CIn/UFPE - DW 18
3
Modelos de Dados de BD NoSQL Modelos de Dados de BD NoSQL
• Exemplo de Relações x Agregados • Exemplo de Relações x Agregados
Considere uma aplicação de comércio eletrônico Alguns dados da aplicação de comércio eletrônico
1 1 Cliente Pagto
Cliente * 1
Pedido
1 ID Nome ID NPedido Cartao Vencimento EndCobran
Nome
1 Ana 33 99 4595-1 10/10/2021 55
1
*
Pagamento
*
ItemPedido Produto Pedido Endereco
EndCobranca
* 1
* NumCartao Preco ID Nome ID Cliente EndEnvio ID Cidade
Vencimento
* * 27 GoPro H4 99 1 77 77 Rec
1 ItemPed EndCobranca
1
Endereço ID NPedido ProdID Preco ID Cliente Endereco
Produto
Rua 100 99 27 500,00 55 1 77
Nome
Cidade
1
Estado
Endereço de Envio
CIn/UFPE - DW 19 CIn/UFPE - DW 20
CIn/UFPE - DW 21 CIn/UFPE - DW 22
CIn/UFPE - DW 23 CIn/UFPE - DW 24
4
Modelos de Dados de BD NoSQL Modelos de Dados de BD NoSQL
• Consequências da orientação a agregados: • Quando volumes de dados aumentam, torna-se
Sistema de BD pode usar o seu conhecimento sobre a mais difícil e custoso fazer uma expansão
estrutura agregada para armazenar e distribuir os dados • Uma opção interessante é a execução do BD em um
Auxilia na execução de um cluster cluster de servidores
• Minimiza o número de nós a serem lidos quando dados Orientação a agregados é útil porque o agregado é uma
estiverem sendo processados unidade natural para ser usada de forma distribuída
BD não possui transações ACID que executem por A execução do BD em um cluster introduz complexidade
múltiplos agregados
• Não é algo para ser feito a menos que os benefícios
• Garantem a manipulação atômica em um único sejam muitos
agregado por vez
• Existem sistemas de BD NoSQL que não executam
• Se vários agregados precisarem ser manipulados de
forma atômica, o código do aplicativo precisará em clusters ou não são orientados a agregados
gerenciar isso BD orientados a grafos: Neo4J
CIn/UFPE - DW 25 CIn/UFPE - DW 26
5
Modelos de Dados de BD NoSQL Modelos de Dados de BD NoSQL
• Modelos de Famílias de Colunas: • Modelos de Famílias de Colunas:
Voltados para cenários onde gravações são raras e é Cada coluna pertence a uma única família de colunas
preciso ler colunas de muitas linhas de uma só vez Cada coluna atua como uma unidade de acesso
Armazena grupos de colunas para todas as linhas como a • Assume-se que dados de uma família de colunas são
unidade básica de armazenamento geralmente acessados juntos
• São chamados de BD colunar ou de família de colunas chave da coluna valor da coluna
família de colunas
• Ex: BigTable e seus descendentes (Cassandra, Hbase) perfil
NOME Ana
ENDCOBRANCA .........
É uma estrutura agregada de dois níveis
PAGTO .........
• Cada linha é um agregado (cliente 1234) de famílias chave da linha
de colunas - representando partes úteis de dados
1234
(perfil, histórico de pedidos) dentro do agregado PED1001 .........
• Cada família de colunas define um tipo de registro PED1002 .........
(perfil de clientes) PED1003 .........
pedidos PED1004 .........
CIn/UFPE - DW 31 CIn/UFPE - DW 32
CIn/UFPE - DW 35 CIn/UFPE - DW 36
6
Modelos de Dados de BD NoSQL Modelos de Dados de BD NoSQL
• Visões materializadas em BD NoSQL: • Abordagem adiada:
São consultas pré-computadas por computações do tipo Evita a sobrecarga acrescida a cada atualização do BD
map-reduce e mantidas em cache para atualização da visão
Visões são atualizadas em lotes e intervalos regulares
• Abordagem antecipada: É preciso entender os requisitos de dados do usuário para
A visão materializada e os dados básicos relacionados a avaliar o quão desatualizadas as visões podem ficar
ela são atualizados ao mesmo tempo
Por exemplo, adicionar um pedido também atualiza o
histórico de compras do agregado para cada produto
Boa abordagem quando há mais leituras da visão
materializada do que gravações e visões precisarem estar
o mais atualizadas possível
CIn/UFPE - DW 37 CIn/UFPE - DW 38
7
Modelos de Distribuição Modelos de Distribuição
• Fragmentação (Data Sharding): • Replicação com cache melhora o desempenho de
Agrupar os dados de modo que um usuário obtenha a leituras, mas pouco faz para otimizar muitas
maior parte de seus dados de um único servidor gravações
• Agregados unidades de distribuição
• Fragmentação (Data Sharding):
Pode melhorar o desempenho de leituras e gravações
Manter a carga distribuída igualmente entre os nós
• Agregados tenham quantidades iguais de carga • Provê uma forma de escalar horizontalmente as
gravações
Juntar agregados se eles forem lidos em sequência Faz pouco para melhorar a tolerância a falhas quando
usada isoladamente
• Embora os dados estejam em nós diferentes, a falha em um nó
Sistemas de BD NoSQL oferecem a auto-fragmentação: torna indisponíveis os dados do fragmento
• Sistema é responsável por alocar os dados nos fragmentos e por • O único benefício é que apenas os usuários dos dados do nó que
garantir que o acesso aos dados seja feito no fragmento correto sofreu a falha serão prejudicados
• Mas não é bom ter um BD com partes de seus dados faltando
CIn/UFPE - DW 43 CIn/UFPE - DW 44
CIn/UFPE - DW 45 CIn/UFPE - DW 46
CIn/UFPE - DW 47 CIn/UFPE - DW 48
8
Modelos de Distribuição Modelos de Distribuição
• Replicação Mestre-Escravo: • Replicação Mestre-Escravo:
Mestres podem ser designados manual ou A replicação traz alguns benefícios interessantes, mas:
automaticamente • Tem um lado negativo inevitável inconsistência
• Manual: usuário escolhe um nó como mestre na • O risco é que usuários diferentes, lendo diferentes
configuração do cluster escravos, vejam valores diferentes, se todas as
• Automática:usuário cria um cluster de nós os quais alterações não tiverem sido propagadas aos escravos
elegem um deles como mestre • Mesmo que a replicação mestre-escravo use uma
cópia de segurança ativa, o problema persiste:
Vantagens da configuração automática: Se o mestre falhar, quaisquer atualizações, que não
• Simplifica a configuração do cluster por si só tenham sido enviadas para a cópia de segurança,
estarão perdidas
• Cluster pode escolher automaticamente um novo
mestre na ocorrência da falha reduzindo o tempo
fora do ar
CIn/UFPE - DW 49 CIn/UFPE - DW 50
9
Consistência Consistência
• Tipos de Conflitos: • Abordagem Pessimista :
Gravação: ocorrem quando dois usuários tentam gravar Bloqueios: para alterar um valor é necessário obter um
os mesmos dados ao mesmo tempo bloqueio de gravação e o sistema assegura que apenas
• Gera o problema da atualização perdida um usuário por vez pode obtê-lo
Leitura-gravação (ou leitura incopnsistente): ocorrem Pode produzir conflitos de bloqueio (deadlocks) difíceis de
quando um usuário lê dados inconsistentes durante a evitar e identificar
gravação feita por outro usuário • Abordagem Otimista:
Atualização condicional: qualquer usuário que execute
• Abordagens de controle de concorrência: uma atualização testa o valor antes de atualizá-lo para ver
Pessimista:Evita que os conflitos ocorram se ele foi alterado desde sua última leitura
Otimista:Permite que os conflitos ocorram, mas os detecta Atualização dupla: gravar ambas as atualizações, registrar
e depois os corrige as que estão em conflito e conciliá-las
• Mostrando ambos valores ao usuário para que ele decida
• Concilia automaticamente, com base em informações de domínio
CIn/UFPE - DW 55 CIn/UFPE - DW 56
Consistência Consistência
• Tanto a Pessimista quanto a Otimista baseiam-se na • Janela de Inconsistência:
serialização consistente das atualizações Nem todos os dados podem ser colocados em um único
Se existir mais de um servidor (como na p2p): dois nós agregado
podem atualizar dados em uma ordem diferente Qualquer alteração que afete múltiplos agregados deixa
resultando em um valor diferente para cada nó aberto um tempo no qual usuários podem realizar leituras
• Replicação contribui para ocorrência de inconsistentes chamado de janela de inconsistência
Consistência Consistência
• Teorema CAP: • Relaxando a durabilidade:
No mundo NoSQL, o teorema CAP corresponde ao motivo É possível trocar um pouco da durabilidade por um
pelo qual pode-se precisar relaxar a consistência desempenho melhor
Baseia-se em três propriedades: Consistência, A durabilidade pode ser balanceada com a latência
Disponibilidade e Tolerância a partições Se um BD puder ser executado em sua maior parte na
Definição: Dadas as 3 propriedades, somente é possível memória e mover periodicamente as alterações para o
obter duas delas. disco, um desempenho melhor pode ser obtido
• Um sistema com um único servidor é um exemplo de CA O custo é que se o servidor falhar, quaisquer atualizações
Como clusters têm de ser tolerantes a partições de rede, feitas desde a última transferência dos dados para o disco
então o teorema CAP na prática diz que: serão perdidas.
• Como um sistema distribuído pode sofrer partições, é preciso
balancear a consistência com a disponibilidade
O sistema resultante não é perfeitamente consistente nem
perfeitamente disponível
CIn/UFPE - DW 59 CIn/UFPE - DW 60
10
Consistência Consistência
• Quóruns: • Quóruns:
Quanto mais nós forem envolvidos em uma solicitação, Lista de parâmetros de configuração de consistência:
maior a chance de evitar uma inconsistência. • N é o número de nós usados para armazenar as
Quantos nós precisam ser envolvidos para produzir uma réplicas do BD chave-valor
alta consistência? • R é o número de nós cujos dados devem ser
• Se as gravações forem conflitantes, apenas uma delas recuperados antes da leitura ser considerada bem
pode obter a maioria quórum de gravação (QG) sucedida
• QG é expresso pela desigualdade: W > N/2 • W é o número de nós nos quais a gravação deve ser
• Significa que o número de nós participantes da executada antes dela ser considerada bem sucedida
gravação (W) deve ser maior que a metade do número Estas configurações nos permite gerenciar a ocorrência
de nós replicados (N) de falhas nos nós em operações de leitura ou gravação
Quantos nós devem ser acessados para garantir que se É possível alterar os valores dos parâmetros para obter
tem a alteração mais atualizada? mais disponibilidade de leitura ou gravação
• Quórum de leitura (QL): R + W > N
CIn/UFPE - DW 61 CIn/UFPE - DW 62
Consistência Tópicos
• Quóruns:
• Introdução
Considere um cluster Riak com cinco nós:
• Se N = 3 significa que todos os dados serão replicados • Modelos de Dados de BD NoSQL
em pelo menos 3 nós
• Modelos de Distribuição
• Se R = 2 indica que dois nós quaisquer devem • Consistência
responder a uma solicitação GET para que esta seja
considerada bem sucedida • Map-reduce
• BD Chave-valor
• Se W = 2 garante que a solicitação PUT seja gravada
em 2 nós antes da gravação ser considerada bem • BD de Família de Colunas
sucedida
• BD de Documentos
CIn/UFPE - DW 63 CIn/UFPE - DW 64
Map-reduce Map-reduce
• Motivação • Objetivos
A ascensão de BD orientados a agregados deve-se em Organizar o processamento para usar as várias máquinas
grande parte ao crescimento dos clusters de um cluster e ao mesmo tempo,
Executar em clusters implica em equilibrar o Manter o processamento dos dados na mesma máquina
armazenamento de dados de maneira diferente da que contém os dados
execução feita em uma única máquina • Definição
Clusters mudam regras de armazenamento de dados e É um padrão que permite que computações sejam
regras de computação paralelizadas em um cluster
• Distribuir os dados entre os vários nodos do cluster • Uma implementação de código aberto faz parte do
• Reduzir a quantidade de dados que deve ser projeto Hadoop
transferida pela rede, processando tanto quanto for • Apache Pig é uma linguagem criada especificamente
possível no nodo onde estiverem os dados necessários para facilitar a escrita de programas map-reduce
• Diversos sistemas de BD NoSQL têm suas próprias
implementações
CIn/UFPE - DW 65 CIn/UFPE - DW 66
11
Map-reduce Map-reduce
• Possui duas tarefas principais: • Exemplo de Aplicação – Cenário:
Mapeamento Suponha que pedidos de clientes formem um agregado,
• Lê dados de um agregado e os agrupa em pares de onde pedidos inteiros são recuperados em um só acesso
chave-valor relevantes Cada pedido possui itens do pedido
• Somente lê um único registro de cada vez e pode, Cada item de pedido possui um ID do produto, a
assim, ser paralelizado e executado no nodo que quantidade e o preço
armazena o registro Como existem muitos pedidos, eles são fragmentados em
várias máquinas
Redução Porém, deseja-se ver os dados do produto e sua receita
• Recebe muitos valores de uma única chave de saída, total nos últimos 7 dias!!
a partir do mapeamento, e os resume em uma única • Esta análise não se adapta à estrutura do agregado existente
saída isto é uma desvantagem do uso de agregados
• Cada redutor trabalha sobre o resultado de uma única Para obter a receita dos produtos, será preciso recuperar
chave, de modo que pode ser paralelizado por chave vários registros de cada máquina do cluster
CIn/UFPE - DW 67 CIn/UFPE - DW 68
Map-reduce Map-reduce
• Etapa de Mapeamento (Função MAP): • Etapa de Mapeamento:
Função cuja entrada é um único agregado e cuja saída Lê registros do BD e gera pares de chave-valor
são alguns pares de chave-valor Refrigerante:
No exemplo, a entrada seria um pedido e a saída seria ID: 1066 Preço: 68,00
pares de chave-valor correspondendo aos itens Cliente: Marta Quantidade: 8
Cada par teria o ID do produto como chave, e a Itens Pedido:
quantidade e o preço como valores Refrigerante 8 8,50 68,00 Suco:
MAP
Cada aplicação da função é independente de todas as Suco 4 37,50 150,00 Preço: 150,00
outras Água Mineral 10 1,99 19,90 Quantidade: 4
• Isto permite que elas sejam paralelizáveis com segurança Endereço de Entrega .....
Cria tarefas de mapeamento em cada nodo e aloca cada Detalhes do Pagamento ..... Água Mineral:
pedido a uma tarefa de mapeamento Preço: 19,90
• Isto produz bastante paralelelismo e localidade no acesso aos Quantidade: 10
dados
CIn/UFPE - DW 69 CIn/UFPE - DW 70
Map-reduce Map-reduce
• Etapa de Redução (Função REDUCE): • Aspectos importantes
Recebe múltiplos resultados do mapeamento com a Funções redutoras que tenham o mesmo formato de
mesma chave e combina seus valores entrada e saída podem ser combinadas em pipelines
Utiliza todos os valores enviados para uma única chave • Isto melhora o paralelelismo e reduz a quantidade de
Recebe diversos pares de chave-valor com a mesma dados a serem transferidos
chave e os agrega Operações de map-reduce podem ser compostas em
pipelines, nas quais a saída de uma redução é a entrada
Preço: 187,50 do mapeamento de outra operação
Quantidade: 5
Se o resultado de uma computação map-reduce for
Preço: 712,50
Preço: 150,00 REDUCE amplamente utilizado, ele pode ser armazenado como
SUCO Quantidade: 19
Quantidade: 4 uma visão materializada
Visões materializadas podem ser atualizadas por meio de
Preço: 375,00
operações map-reduce que apenas computem alterações
Quantidade: 10
na visão, em vez de computar tudo desde o início
CIn/UFPE - DW 71 CIn/UFPE - DW 72
12
Tópicos BD Chave-valor
• Introdução • Características:
É o tipo de BD NoSQL mais simples de usar a partir da
• Modelos de Dados de BD NoSQL perspectiva de uma API. O usuário pode:
• Obter o valor de uma determinada chave
• Modelos de Distribuição
• Inserir um valor para uma dada chave
• Consistência • Remover uma chave do BD
• Map-reduce Valor é um blob ou texto ou JSON ou XML que o BD
guarda sem se preocupar ou saber o que há dentro dele
• BD Chave-valor • É responsabilidade da aplicação entender o que está
armazenado
• BD de Família de Colunas
Já que o acesso é sempre feito pela chave primária:
• BD de Documentos • Um bom desempenho pode ser alcançado
• Podem ser escaláveis facilmente
CIn/UFPE - DW 73 CIn/UFPE - DW 74
BD Chave-valor BD Chave-valor
• Baseia-se em uma hash table contendo uma chave • Consistência no Riak
única e um apontador para um item particular de Modelo de consistência eventual é implementado
dado Quando o valor é replicado em outros nós, conflitos de
• Exemplos: atualização podem ser resolvidos de duas maneiras:
• Gravação mais recente prevalece sobre as mais antigas
Riak
• Todos os valores são retornados para o usuário resolver o conflito
Redis
Estas opções podem ser configuradas na criação do
HamsterDB bucket valores padrões podem ser fornecidos
Amazon DynamoDB (que não é open-source) Por exemplo: uma gravação pode ser efetivada apenas
Project Voldemort (versão open-source do DynamoDB) quando os dados forem consistentes para todos nós que
• Riak: mantiverem estes dados
Permite associar chaves a namespaces ou buckets
Buckets de domínio são usados para guardar dados
específicos
CIn/UFPE - DW 75 CIn/UFPE - DW 76
BD Chave-valor BD Chave-valor
• Consistência no Riak • Consultas
Exemplo de configuração de parâmetros de consistência Todos BD chave-valor podem ser consultados pela chave
na criação do bucket: Se for preciso consultar algum atributo da coluna de
Bucket bucket = connection valores, o sistema NoSQL não disponibiliza o recurso
.createBucket (bucketName) • Aplicação do usuário se encarregará de fazer esta busca
.withRetrier (attempts(3)) Realizar consultas por chave também causa problemas se
.allowSiblings (siblingsAllowed) a chave não for conhecida
.nVal (numberOfReplicasOfTheData) • A maioria dos sistemas NoSQL não fornece uma lista de todas as
.w (numberOfNodesToRespondToWrite) chaves primárias
.r (numberOfNodesToRespondToRead) O projeto da chave primária é importante:
.execute(); • Pode ser gerada por meio de algum algoritmo?
• Pode ser fornecida pelo usuário?
• Pode ser derivada do relógio do sistema?
CIn/UFPE - DW 77 CIn/UFPE - DW 78
13
BD Chave-valor BD Chave-valor
• Casos de uso apropriados • Quando não usar:
Armazenando informações de sessão Relacionamentos entre dados
• Toda sessão web é única e recebe um valor único de sessionId • Modelar relacionamentos entre diferentes conjuntos de dados ou
• Tudo sobre a sessão pode ser inserido por um único PUT ou correlacionar dados entre diferentes conjuntos de chaves
recuperado usando GET
Perfis de usuário, preferências Transações com múltiplas operações
• Quase todos os usuários têm um único userId (ID do usuário), um • Gravar múltiplas chaves e ocorrer uma falha na gravação de
único username (nome de usuário) ou algum outro atributo único, alguma delas, e for preciso reverter ou desfazer
além de preferências, cor, idioma, etc
• Tudo isso pode ser colocado em um objeto e obtido pelo GET Consulta por dados
Carrinhos de compra • Pesquisar chaves com base no valor de pares chave-valor
• Websites de comércio eletrônico possuem carrinhos de compras
associados ao usuário
Operações de conjuntos
• Todas as informações de compras podem ser colocadas no valor
onde a chave é userId • Executar operações sobre múltiplas chaves por vez
CIn/UFPE - DW 79 CIn/UFPE - DW 80
CIn/UFPE - DW 83 CIn/UFPE - DW 84
14
BD de Família de Colunas BD de Família de Colunas
• O que é uma coluna? • O que é uma linha?
// família de colunas
{ Nome : “PrimeiroNome”, CHAVE
{
Valor : “Mateus”, VALOR
// linha
Timestamp : 1234567890
“pedro-souza” : { Nome : “Pedro”,
}
Sobrenome : “Souza”,
UltimaVisita : “12/12/2012” }
// linha
“marta-alves” : { Nome : “Marta”,
Sobrenome : “Alves”,
Local : “Recife” } }
CIn/UFPE - DW 85 CIn/UFPE - DW 86
15
BD de Família de Colunas BD de Família de Colunas
• Consultas e Manipulação de Dados usando CQL:
Conta : { Para criar uma família de colunas:
Nome : “conta:default”,
CREATE COLUMNFAMILY Cliente (
Valor: {
KEY varchar PRIMARY KEY,
numeroCartao : “ 9999-7777-5555-1111”,
nome varchar,
vencimento: “12/2020”
cidade varchar,
}
web varchar ) ;
} Para inserir os mesmos dados:
} INSERT INTO Cliente (KEY, nome, cidade, web)
} VALUES ( ‘pedro-souza’, ‘Pedro Souza’, ‘Recife’,
‘www.pedrosouza.com’);
CIn/UFPE - DW 91 CIn/UFPE - DW 92
BD de Documentos BD de Documentos
• Documentos: armazenados na parte do valor • O que é um BD de documentos?
São o conceito principal pois armazenam e recuperam
documentos (XML, JSON, BSON, etc) { “Nome” : “Marta”,
São árvores hierárquicas e autodescritivas contendo “Gosta” : [ “Ciclismo”, “Fotografia” ] ,
coleções de valores e valores escalares “UltimaCidade” : “Recife”
São semelhantes entre si mas não têm de ter exatamente
}
a mesma estrutura
ORACLE MongoBD
Instância do BD Instância MongoDB
Esquema Banco de Dados
Tabela Coleção
Linha Documento
Rowid _id
Junção DBRef
CIn/UFPE - DW 95 CIn/UFPE - DW 96
16
BD de Documentos BD de Documentos
• O que é um BD de documentos? • Documentos podem ter:
{ “Nome” : “Pedro”, Atributos diferentes entre si
“CidadesVisitadas” : [ “Recife”, “Olinda” , “Natal”, “Fortaleza” ] , • Campos que aparecem em um documento mas não
aparecem em outro
“Enderecos” : [
• Campos com nomes diferentes
{ “Estado” : “PB”, Atributos compostos (por exemplo, listas e arrays)
“Cidade” : “Patos”, Diferentes representações de dados e pertencerem à
“Tipo” : “R” } , mesma coleção de documentos
Objetos complexos: vários documentos dentro de um
{ “Estado” : “SP”,
outro documento
“Cidade” : “Campinas”,
• Documentos não possuem atributos vazios
“Tipo” : “R” } ] , Se um dado atributo não for encontrado, supõe-se que ele
“UltimaCidade” : “Recife” } não é relevante para o documento
CIn/UFPE - DW 97 CIn/UFPE - DW 98
BD de Documentos BD de Documentos
• Documentos permitem que novos atributos sejam • Características:
criados sem a necessidade de: Cada instância do MongoDB possui zero ou mais BD
Definição prévia Cada BD pode ter zero ou mais coleções de documentos
Alteração nos documentos já existentes Coleções são compostas de zero ou mais documentos e
• Exemplos de sistemas que usam armazenamento podem ser indexadas
de documentos: Um documento possui um ou mais campos
MongoDB Ao armazenar um documento, é preciso escolher em qual
BD e em qual coleção ele ficará
CouchDB
Quando dados são solicitados, MongoDB retorna um
Terrastore
ponteiro para um result set (chamado de cursor)
OrientDB
• Por que usar uma terminologia diferente?
RavenDB
SGBDR define colunas ao nível de tabelas
Lotus Notes
MongoDB define seus campos ao nível de documentos
CIn/UFPE - DW 99 CIn/UFPE - DW 100
BD de Documentos BD de Documentos
• Consistência • Consistência
É configurada usando as réplicas e esperando que as Parâmetros de gravação/leitura podem ser configurados:
gravações sejam replicadas: • Na conexão ou
• Em todos os escravos ou • Na criação do BD ou
• Em um determinado número de escravos • Na criação da coleção de documentos ou
Cada gravação define o número de escravos cuja • Individualmente, para cada operação
atualização deve ser propagada antes dela ser Por padrão, uma gravação é informada como bem-
considerada bem-sucedida sucedida assim que o BD é atualizado
É possível informar ao sistema o quão alta é a • Por padrão, todas as gravações são reportadas como bem-
consistência desejada. Por exemplo: sucedidas
• Isso pode ser alterado para que se espere até as gravações serem
• Único servidor com W = “majority”: gravação será concluída
sincronizadas em disco ou propagadas para 2 ou mais escravos
imediatamente já que há apenas um nó
• Três nós no conjunto de réplicas com W = “majority”: a gravação DBCollection shopping = database.getCollection (“shopping”);
terá de se completar em pelo menos dois nós antes de ser
informada como bem-sucedida shopping.setWriteConcern (REPLICAS_SAFE);
CIn/UFPE - DW 101 CIn/UFPE - DW 102
17
BD de Documentos BD de Documentos
• Consistência • Consistência
É também possível configurar a consistência desejada por Transações no nível de um único documento são
operação de gravação: conhecidas como atômicas
DBCollection shopping = database.getCollection (“shopping”); Transações não têm mais de uma operação
• Porém, o RavenDB processa transações com múltiplas operações
WriteResult resultado =
Níveis diferentes de consistência/segurança nas
shopping.insert (pedido, REPLICAS_SAFE); gravações e leituras podem ser escolhidos
• Menor nível de segurança: WriteConcern.NONE
É também possível indicar que leituras poderão ser feitas
Existe um equilíbrio que precisa ser cuidadosamente
nos nós escravos:
pensado com base nos requisitos de negócio da aplicação
• Na conexão com o BD:
• Identificar quais configurações fazem sentido na leitura
Mongo mongo = new Mongo (“localhost:27017”); • Definir o nível de segurança desejado durante a gravação
mongo.slaveOK();
18