Algoritmos de Junção Estrela em MapReduce

Documentos relacionados
COMPUTAÇÃO EM NUVEM E PROCESSAMENTO MASSIVO DE DADOS Conceitos, tecnologias e aplicações

COMPUTAÇÃO EM NUVEM E PROCESSAMENTO MASSIVO DE DADOS Conceitos, tecnologias e aplicações

FastBit e Índice Bitmap de Junção. Anderson Chaves Carniel Prof. Thiago Luís Lopes Siqueira

Autor 1 Orientador: 1. dia de mês de ano

Haddop, MapReduce e Spark

Índice Bitmap e Indexação de Ambientes de Data Warehousing

SB-index: Um Índice Espacial baseado em Bitmap para Data Warehouse Geográfico

Apache Spark I NTRODUÇÃO À C OMPUTAÇÃO PARALELA E D ISTRIBUÍDA

Bruno Antunes da Silva UFSCar - Sorocaba

Um Servidor Escalável para Bases Massivas de

Uso de Map Reduce no Processamento de Joins Sobre Dados Espaciais em Árvores R-Tree Distribuídas

AVALIAÇÃO DE DESEMPENHO DE PROCESSAMENTO DISTRIBUÍDO EM LARGA ESCALA COM HADOOP

ARMAZENAMENTO E PROCESSAMENTO DE BANCOS DE DADOS RELACIONAIS

Introdução Ferramentas Unix MapReduce Outras Ferramentas. Batch Processing. Fabiola Santore. Universidade Federal do Paraná

Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri. Banco de Dados Processamento e Otimização de Consultas

Sumário. Referências utilizadas. Introdução. MAFIA: Merging of Adaptive Finite Intervals. Introdução Visão Geral e Objetivos do MAFIA

PrIntCloud. Disciplina: Procedência de Dados e Data Warehousing. Aluna: Shermila Guerra Santa Cruz. 16/04/13

Sobre a execução de workflows científicos sobre diferentes estrategias de dados de entrada - Uma Avaliação Experimental

MapReduce Mapeando e reduzindo

Processamento de INDUSTRIA 4.0. Big Data. Aula #10 - Processamento distribuído de dados FONTE: DELIRIUM CAFE EDUARDO CUNHA DE ALMEIDA

ANÁLISE E PROJETO DE BANCO DE DADOS

BCD29008 Banco de dados

BUSINESS INTELLIGENCE E DATA WAREHOUSE. Big Data Conceitos, Técnicas, Ferramentas e Arquitetura. tutorpro.com.br cetax.com.br

Framework para Deduplicação de Dados com Apache Spark

BCD29008 Banco de dados

Análise de Estratégias de Acesso a Grandes Volumes de Dados

Tecnologias Oracle para DW Visões Materializadas no Oracle

Técnicas de Big Data e Projeção de Medidas de Risco para de Negociação em Alta Frequência

Métodos de Acesso Métrico

MATA60 BANCO DE DADOS Aula 10- Indexação. Prof. Daniela Barreiro Claro

Bancos de Dados IV. OLAP e Cubos de Dados. Rogério Costa

Processamento da Consulta. Processamento da Consulta

QUESTIONÁRIO SOBRE HADOOP LEITURA DO MATERIAL FORNECIDO ALUNO/GRUPO ;

Aula 02. Evandro Deliberal

Implementação do Conceito Big Data Utilizando Processamento Paralelo.

Rápida revisão do Modelo Relacional

Tecnologias Oracle para DW Visões Materializadas no Oracle

Capítulo 9: Sistemas de banco de dados

Modelagem Multidimensional - Nível Físico -

Armazenamento Distribuído de Dados Seguros para Efeito de Sistemas de Identificação Civil

NoSQL Apache Cassandra para DBAs. Conceitos básicos que todo DBA deve conhecer sobre Apache Cassandra.

Uma Abordagem para Processamento Distribuído de Junção por Similaridade sobre Múltiplos Atributos

SQL. Processamento Analítico de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri Prof. Dr. Ricardo Rodrigues Ciferri

HadoopDB. Edson Ie Serviço Federal de Processamento de Dados - SERPRO

Big Data Open Source com Hadoop

Como mencionado, David J. DeWitt e Jim Gray [2] afirmam que um sistema paralelo ideal deve apresentar duas propriedades chave:

Subconsulta na Cláusula FROM

Sumário. Definição do Plano de Execução

Modelagem Multidimensional - Nível Físico -

Uma introdução ao Apache Hama

3 Plano de Execução de Consultas

SQL. Processamento Analítico de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri Prof. Dr. Ricardo Rodrigues Ciferri

Sistemas de Bases de Dados 1.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

Anderson Chaves Carniel Profa. Dra. Cristina Dutra de Aguiar Ciferri

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Escalonamento de Aplicações BoT em Ambiente de Nuvem

Modelagem Multidimensional - Nível Físico -

MongoDB BANCO DE DADOS NÃO RELACIONAL ORIENTADO A DOCUMENTOS BANCO DE DADOS AVANÇADOS VALÉRIA TIMES

MATA60 BANCO DE DADOS Aula: Otimização. Prof. Daniela Barreiro Claro

PÓS GRADUAÇÃO UNIVERSIDADE POSITIVO CAMYLA CRISTIANE BALTAZAR WOJCIK

MySql. Introdução a MySQL. Andréa Garcia Trindade

Informática I. Aula 8. Aula 8-25/09/2006 1

Estudo de implementação de um cluster utilizando apache hadoop. Giovanni Furlanetto

SLK: Uma Ferramenta para Monitoramento e Análise do Consumo de Energia em Processamento de Consultas em MapReduce

Sistemas de Bases de Dados 1.º teste (com consulta limitada: 2 folhas identificadas) - Duração: 2 horas

Benjamin Bengfort Jenny Kim

Bases de Dados. Álgebra Relacional II Junções, agregações, vistas. P. Serendero,

Bases de Dados. Algoritmos. Custo de operação. Algoritmos de selecção. Algoritmo de ordenação. Algoritmos de junção.

OLAP. Introdução. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Avaliação do Star Schema Benchmark aplicado a bancos de dados NoSQL distribuídos e orientados a colunas. Lucas de Carvalho Scabora

Processamento e Otimização de Consultas. Msc. Simone Dominico Orientador: Dr. Eduardo Cunha de Almeida PPGINF - UFPR


Informática Parte 10 Prof. Márcio Hunecke

14/03/12. Fragmentação Vertical. Projeto de Bancos de Dados Distribuídos (Parte 02) Complexidade. Objetivo. Complexidade. Abordagens Heurísticas

Interoperabilidade entre Bancos de Dados Relacionais e Bancos de Dados NoSQL (Parte 2)

Avaliação do Tempo de Processamento e Comunicação via Rotinas MPI Assíncronas no Modelo OLAM

A NOVA EXPERIÊNCIA ANALÍTICA

Processamento da Junção Espacial Distribuída utilizando a técnica de Semi-Junção Espacial

CEFET/RJ Centro Federal de Educação Tecnológica Celso Suckow da Fonseca 2. LNCC Laboratório Nacional de Computação Científica 3

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

Sumário SELECT + FROM

INSTITUTO SUPERIOR TÉCNICO Administração e Optimização de Bases de Dados

Introdução ao Banco de Dados. Banco de Dados

SQL (Tópicos) Structured Query Language

Modelagem Multidimensional - Nível Físico -

Informática Parte 11 Prof. Márcio Hunecke

BANCO DE DADOS II SQL Básico. COTEMIG Gerson Borges

Sumarizando Dados. Fabrício Olivetti de França. Universidade Federal do ABC

Seminário apresentado em 29/06/2017 Disciplina: Sistemas Distribuídos Professora: Noemi Rodriguez Aluno: Ricardo Dias

SQL - Perguntas. André Restivo. Faculdade de Engenharia da Universidade do Porto. February 24, 2012

Pós-Graduação em Computação Distribuída e Ubíqua

Processamento de dados em "tempo real"

Bases de Dados Distribuídas

Ambiente de Data Warehouse Para Imagens Médicas Baseado Em Similaridade

Processamento de Consultas. Simone Dominico Orientador: Dr. Eduardo Cunha de Almeida PPGINF - UFPR

MODELO DE BANCO DE DADOS RELACIONAL

Uso de Índices na Otimização e Processamento de Consultas. Otimização e Processamento de Consultas. Otimização e Processamento de Consultas

Transcrição:

Algoritmos de Junção Estrela em MapReduce Jaqueline Joice Brito 09 de junho de 2015 1

Modelo Relacional Dados armazenados em um conjunto de tabelas Amplamente utilizado Junção Recuperação de dados de duas ou mais tabelas baseada em relações lógicas Operação custosa SELECT nome, cargo FROM Cliente C, Profissao P WHERE C.cod_profissao = P.cod_profissao 2

Processamento Distribuído Otimização Minimização da comunicação entre os nós 3

HDFS - Hadoop Distributed File System NameNode DataNode 1 DataNode 2 DataNode 3 DataNode 4 4

HDFS - Hadoop Distributed File System NameNode DataNode 1 DataNode 2 DataNode 3 DataNode 4 5

HDFS - Hadoop Distributed File System NameNode Metadados DataNode 1 DataNode 2 DataNode 3 DataNode 4 Cada bloco possui 3 réplicas distribuídas entre os DataNodes 6

MapReduce casa rio boneca rio dado casa dado boneca dado casa boneca rio rio casa boneca dado 7

MapReduce casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado 8

MapReduce chave casa,1 rio, 1 boneca, 1 rio,1 valor casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado dado,1 casa, 1 dado, 1 boneca, 1 dado,1 casa, 1 dado, 1 rio, 1 rio,1 casa, 1 rio, 1 dado, 1 9

MapReduce chave valor casa,1 rio, 1 boneca, 1 rio,1 boneca, 1 boneca, 1 casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado dado,1 casa, 1 dado, 1 boneca, 1 dado,1 casa, 1 dado, 1 rio, 1 rio,1 casa, 1 rio, 1 dado, 1 casa,1 casa, 1 casa, 1 casa, 1 dado, 1 dado, 1 dado, 1 dado, 1 dado, 1 rio, 1 rio, 1 rio, 1 rio, 1 rio, 1 10

MapReduce casa,1 rio, 1 boneca, 1 rio,1 boneca, 1 boneca, 1 casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado casa rio boneca rio dado casa dado boneca dado casa dado rio rio casa rio dado dado,1 casa, 1 dado, 1 boneca, 1 dado,1 casa, 1 dado, 1 rio, 1 rio,1 casa, 1 rio, 1 dado, 1 casa,1 casa, 1 casa, 1 casa, 1 dado, 1 dado, 1 dado, 1 dado, 1 dado, 1 rio, 1 rio, 1 rio, 1 rio, 1 rio, 1 boneca, 2 casa, 4 dado, 5 rio, 5 11

Modelo MapReduce Otimização Redução da comunicação (fase de shuffling) Minimização do número de jobs MapReduce Mappers... Shuffling Reducers... 12

Junção em MapReduce Map-side Join Junção na função Map Reduce-side Join Junção na função Reduce 13

Map-side Join Junção é realizada na função Map SELECT a, b FROM S, T WHERE S.c = T.c S s c a 1 5 8 2 6 7 3 6 4 4 4 7 T t c b 5 6 4 7 4 2 8 4 1 10 5 4 14

Map-side Join Junção é realizada na função Map SELECT a, b FROM S, T WHERE S.c = T.c S s c a 1 5 8 2 6 7 3 6 4 4 4 7 S 1 T 1 s c a 4 4 7 1 5 8 S 2 s c a 2 6 7 3 6 4 T t c b 5 6 4 7 4 2 8 4 1 10 5 4 t c b 7 4 2 8 4 1 10 5 4 T 2 t c b 5 6 4 15

Map-side Join Mapper 1 S 1 t c b T 1 s c a 7 4 2 4 4 7 8 4 1 1 5 8 10 5 4 Mapper 2 S 2 T 2 s c a t c b 2 6 7 5 6 4 3 6 4 Dados são particionados e ordenados pela chave de junção (atributo c) Blocos correspondentes de cada arquivo são processados por uma única tarefa Mapper A função Map é aplicada sobre um dos blocos (ex: S 1 ), enquanto o outro bloco correspondente (ex: T 1 ) é lido dentro da tarefa Mapper Cada Mapper possui os dados necessários para realizar a junção de seus blocos 16

Map-side Join Memory-backed Join Mapper 1 S 1 s c a 4 4 7 1 5 8 T t c b 7 4 2 8 4 1 10 5 4 5 6 4 Dados em memória primária local Tabela menor (ex: tabela T) é armazenada na memória primária local de cada nó Mapper 2 S 2 s c a 2 6 7 3 6 4 T t c b 7 4 2 8 4 1 10 5 4 5 6 4 Blocos da tabela maior (ex: S) são processados nos diferentes mappers Cada mappers tem acesso a todos os dados da tabela menor (ex: tabela T) 17

Reduce-side Join Mapper 1 entrada saída Mapper 2 entrada saída S T s c a key value t c b Key value 1 5 8 s,4 7 5 6 4 t,4 2 2 6 7 3 6 4 4 4 7 s,5 8 s,6 7 s,6 4 7 4 2 8 4 1 10 5 4 t,4 1 t,5 4 t,6 4 idenbtificador da tabela S atributo de junção c atributo a idenbtificador da tabela T atributo de junção c atributo b 18

Reduce-side Join Mapper 1 Mapper 2 S T s c a key value t c b Key value 1 5 8 s,4 7 5 6 4 t,4 2 2 6 7 s,5 8 7 4 2 t,4 1 3 6 4 s,6 7 8 4 1 t,5 4 4 4 7 s,6 4 10 5 4 t,6 4 Reducer 1 Reducer 2 key value s,4 7 s,5 8 t,4 2 t,4 1 Entrada do Reducer 1 key value s,6 7 s,6 4 t,6 4 Entrada do Reducer 2 t,5 4 19

Reduce-side Join Mapper 1 Mapper 2 S T s c a key value t c b Key value 1 5 8 s,4 7 5 6 4 t,4 2 2 6 7 s,5 8 7 4 2 t,4 1 3 6 4 s,6 7 8 4 1 t,5 4 4 4 7 s,6 4 10 5 4 t,6 4 Reducer 1 Reducer 2 key value s,4 7 saída key value saída s,5 8 7, 2 s,6 7 7, 4 t,4 2 7, 1 s,6 4 4, 4 t,4 1 8, 4 t,6 4 t,5 4 20

Junção em MapReduce Map-side Join Desvantagem: aplicável quando o conjunto pode ser ordenado e particionado pelo atributo de junção Memory-backed Join Desvantagem: aplicável quando uma das tabelas é pequena e cabe na memória primária de cada nó Vantagem: processamento local, dispensando a fase de shuffling Reduce-side Join Vantagem: aplicável em qualquer conjunto de tabelas Desvantagem: necessidade da fase de shuffling 21

Data Warehouse Banco de dados voltado ao processamento analítico para a tomada de decisão Modelagem multidimensional Medidas numéricas: objetos de análise Dimensões: perspectiva/contexto para as análises (fornecedor, cliente) C F 4 2 C 3 F C 2 1 C 1 unidades vendidas (cliente) (fornecedor) (produto, cliente) P 3 P 2 P 3 P 2 (produto, fornecedor) P 1 P 1 C 4 C 3 C 2 C 1 (produto) F 1 F 2 22

Esquema Estrela Star Schema Benchmark (SSB) 23

Consulta de Junção Estrela Consulta Q3.2 do SSB SELECT c_city, s_city, d_year, SUM(lo_revenue) as revenue FROM Lineorder, Supplier, Customer, Date WHERE lo_custkey = c_custkey AND lo_suppkey = s_suppkey AND lo_orderdate = d_datekey AND c_nation = UNITED STATES AND s_nation = UNITED STATES AND d_year >= 1992 AND d_year <= 1997 GROUP BY c_city, s_city, d_year ORDER BY c_city, s_city, d_year 24

Consulta de Junção Estrela Consulta Q3.2 do SSB SELECT c_city, s_city, d_year, SUM(lo_revenue) as revenue FROM Lineorder, Supplier, Customer, Date WHERE lo_custkey = c_custkey AND lo_suppkey = s_suppkey AND lo_orderdate = d_datekey AND c_nation = UNITED STATES AND s_nation = UNITED STATES AND d_year >= 1992 AND d_year <= 1997 GROUP BY c_city, s_city, d_year ORDER BY c_city, s_city, d_year cláusulas de junção cláusulas de filtragem 25

Sequência de Junções Binárias em MapReduce Um job MapReduce para cada junção Lineorder Supplier Job 1 Customer Job 2 Date Job 3 26

Algoritmo de Afrati e Ullman (2010) Proposta: realizar todas as junções em apenas um job S(s) U(s, t) T(t) A O domínio do atributo s é dividido em A blocos, enquanto que o domínio de t é dividido em B blocos O número de processos reducers é dado por AB a i =0 a i =1 a i =2 B b i =0 b i =1 (0,0) (0,1) (1,0) (1,1) (2,0) (2,1) Supondo que A=3 e B=2, temos um total de 6 reducers Cada processo reduce é identificado por um par (a i, b i ) 27

Algoritmo de Afrati e Ullman (2010) Proposta: realizar todas as junções em apenas um job S(s) U(s, t) T(t) O processo reduce para o qual uma tupla deve ser enviada é identificado por dois valores, a e b, determinados a partir dos atributos s e t (atributos de junção) b i (0,0) (0,1) A=3 e B=2 f(a i, b i ) = a i *B + b i b i 0 1 a i (1,0) (1,1) a i 2 3 (2,0) (2,1) 4 5 28

Algoritmo de Afrati e Ullman (2010) Proposta: realizar todas as junções em apenas um job S(s) U(s, t) T(t) Para cada valor s i do atributo s, a i = mod(s i, A) Para cada valor t i do atributo t, b i = mod(t i, B) Reducer identificado por uma função f(a i, b i ) = a i *B + b i b i (0,0) (0,1) A=3 e B=2 b i 0 1 a i (1,0) (1,1) a i 2 3 (2,0) (2,1) 4 5 29

Algoritmo de Afrati e Ullman (2010) Proposta: realizar todas as junções em apenas um job S(s) U(s, t) T(t) Cada tupla de S precisa ser enviada para todos os reducers identificados por um determinado valor a i Cada tupla de T precisa ser enviada para todos os reducers identificados por um um determinado valor b i b i (0,0) (0,1) A=3 e B=2 b i 0 1 a i (1,0) (1,1) a i 2 3 (2,0) (2,1) 4 5 30

Algoritmo de Afrati e Ullman (2010) Exemplo: s 1 2 3 4 s t 2 5 3 7 1 8 S(s) S U T 4 10 U(s, t) T(t) t 5 7 8 10 Id do processo reduce f(a i, b i ) = a i *B + b i A=3 e B=2 Tuplas da tabela U são enviadas para um único reduce S U T b i s a i = 1 a i = 2 s t a i = 2 b i = 1 a i = 0 b i = 1 t b i = 1 b i = 1 (0,0) (0,1) (1,0) (1,1) a i a i = 0 a i = 1 a i = 1 b i = 0 a i = 1 b i = 0 b i = 0 b i = 0 (2,0) (2,1) 31

Algoritmo de Afrati e Ullman (2010) Exemplo: s s 1 2 3 4 a i = 1 a i = 2 a i = 0 a i = 1 S U T s t 2 5 3 7 1 8 4 10 s S(s) t a i = 2 b i = 1 a i = 0 b i = 1 a i = 1 b i = 0 a i = 1 b i = 0 t 5 7 8 10 S U T U(s, t) T(t) t b i = 1 b i = 1 b i = 0 b i = 0 Id do processo reduce f(a i, b i ) = a i *B + b i Cada tupla da tabela S é enviada para B reducers (todos reducers de uma mesma linha) (0,0) (0,1) (1,0) (1,1) (2,0) (2,1) b i a i A=3 e B=2 32

Algoritmo de Afrati e Ullman (2010) Exemplo: S U T s 1 2 3 4 s t 2 5 3 7 1 8 S(s) 4 10 U(s, t) T(t) t 5 7 8 10 Id do processo reduce f(a i, b i ) = a i *B + b i A=3 e B=2 Cada tupla da tabela T é enviada para A reducers (todos reducers de uma mesma coluna) S U T s a i = 1 a i = 2 a i = 0 a i = 1 s t a i = 2 b i = 1 a i = 0 b i = 1 a i = 1 b i = 0 a i = 1 b i = 0 t b i = 1 b i = 1 b i = 0 b i = 0 (0,0) (0,1) (1,0) (1,1) (2,0) (2,1) b i a i 33

Algoritmo de Afrati e Ullman (2010) Reducer 0 Reducer 1 Reducer 2 Chave Valor Chave Valor Chave Valor S 3 null S 1 null S 3 null T 5 null S 4 null T 8 null T 7 null T 8 null T 10 null U 3,7 null T 10 null U 1,8 null U 4,10 null Reducer 3 Reducer 4 Reducer 5 Chave Valor Chave Valor Chave Valor S 1 null S 2 null S 2 null S 4 null T 8 null T 5 null T 5 null T 10 null T 7 null T 7 null U 2,5 null 34

Algoritmo de Afrati e Ullman (2010) Reducer 0 Reducer 1 Reducer 2 Chave Valor Chave Valor Chave Valor S 3 null S 1 null S 3 null T 5 null S 4 null T 8 null T 7 null T 8 null T 10 null U 3,7 null T 10 null U 1,8 null U 4,10 null Reducer 3 Reducer 4 Reducer 5 Chave Valor Chave Valor Chave Valor S 1 null S 2 null S 2 null S 4 null T 8 null T 5 null T 5 null T 10 null T 7 null T 7 null U 2,5 null 35

Algoritmo de Afrati e Ullman (2010) s t 3 7 Reducer 1 Reducer 2 Chave Valor Chave Valor S 3 null S 1 null T 5 null S 4 null T 7 null T 8 null U 3,7 null T 10 null U 1,8 null U 4,10 null s t 1 8 4 10 s t 2 5 Reducer 5 Chave Valor S 2 null T 5 null T 7 null U 2,5 null 36

Algoritmo de Afrati e Ullman (2010) Vantagem realiza todas as junções em apenas um job MapReduce Desvantagem Replicação de dados das tabelas de dimensão (S e T no exemplo) Caso existam filtros nas tabelas de dimensão, tuplas da tabela de fatos (U no exemplo) são enviadas para os reducers desnecessariamente 37

Referências Han, H.; Jung, H.; Eom, H.; Yeom, H. Y. Scatter-gather-merge: An efficient star-join query processing algorithm for data-parallel frameworks. Cluster Computing, v. 14, n. 2, p. 183 197, 2011. Afrati, F. N.; Ullman, J. D. Optimizing joins in a map-reduce environment. In: Proceedings of the 13th International Conference on Extending Database Technology (EDBT 2010), 2010. p. 99 110. Tao, Y., Zhou, M., Shi, L., Wei, L., Cao, Y.: Optimizing multi-join in cloud environment. In: Proceedings of the IEEE International Conference on High Performance Computing and Communications & 2013 IEEE International Conference on Embedded and Ubiquitous Computing. pp. 956 963 (2013). Thusoo, A., Sarma, J.S., Jain, N., Shao, Z., Chakka, P., Zhang, N., Anthony, S., Liu, H., Murthy, R.: Hive - a petabyte scale data warehouse using hadoop. In: ICDE. pp. 996 1005 (2010)5. Zhang, C., Wu, L., Li, J.: Efficient processing distributed joins with bloomfilter using mapreduce. Int J Grid Ditrib Comput 6(3), 45-58 (2013). 38

Obrigada 39