Dados gerais sobre a disciplina
Código: QXD0099
Curso: Engenharia de Software
Turma: 6º Período
Turno: Tarde
Carga Horária: 64h
Local: Bloco 1 - Sala 1 / Bloco 1 - Laboratório 2
Horários: Segunda e Terça das 15:30 às 17:30h
http://bit.ly/ufcregis
Definição de persistência. Persistência empregando arquivos binários, documentos XML, objetos serializáveis, SGBDs.
Tecnologias para persistência de informações. Persistência de objetos usando base relacional.
- Persistência de Arquivos: texto, binário, CSV, propriedades.
- XML, YAML
- JSON
- Serialização de objetos.
- JDBC
- JPA2
- SBGDs NoSQL
- Orientados à documentos - MongoDB
- Chave-valor - Redis
- Orientados à coluna - Cassandra
- Grafo - Neo4J. Graphast
- Database e backend como serviço - Firebase
- Recursos para aprender noSQL
- Bibliografia NoSQL comentada
- Picking the Right NoSQL Database Tool
- APIs:
- XML
- JSON
- google-gson - A Java serialization/deserialization library to convert Java Objects into JSON and back.
- Jackson - Multi-purpose Java library for processing JSON data format.
- Jackson is a suite of data-processing tools for Java (and the JVM platform), including the flagship streaming JSON parser / generator library, matching data-binding library (POJOs to and from JSON) and additional data format modules to process data encoded in Avro, BSON, CBOR, CSV, Smile, (Java) Properties, Protobuf, XML or YAML; and even the large set of data format modules to support data types of widely used data types such as Guava, Joda, PCollections and many, many more.
- Jackson vs Gson (excelente artigo com exemplos)
- Jackson 2 – Convert Java Object to / from JSON (exemplo completo)
- Visualização de Dados
- Editores / Visualizadores rápidos de grandes arquivos
- Large Text File Viewer
- It uses little memory and is able to open a gigabyte file instantly.
- When the user hovers the mouse over any field in a CSV file, a hint automatically appears with the field name.
- HxD - Freeware Hex Editor and Disk Editor
- Instant opening regardless of file-size.
- opening and editing is very fast.
- Tail for Win32 - Windows version of the UNIX 'tail -f' command.
- E-book gratuito sobre como montar um servidor gratuito por um ano na Amazon Web Services
- Desenvolvimento em Java 2.0: Redis para o mundo real: Por que o Redis é melhor que o memcached em aplicativos muito lidos
- Básica
- PANIZ, David. NoSQL: Como armazenar os dados de uma aplicação moderna. São Paulo, SP: Casa do Código, [2016].
- SADALAGE, P. J. E FOWLER, M. NoSQL Essencial. Editora Novatec, São Paulo, 2013.
- BOAGLIO, Fernando. MongoDB: Construa novas aplicações com novas tecnologias. São Paulo, SP: Casa do Código, [2015].
- LAZOTI, Rodrigo. Armazenando dados com Redis. São Paulo, SP: Casa do Código, [2014].
- REDMOND, E.; WILSON, J. R. Seven Databases in Seven Weeks: A Guide to Modern Databases and the NoSQL Movement. 1ª edição, 2012. The Pragmatic Programmers.
- ULLMAN, J.D.; WIDOW, J. First Course in Database Systems. 3a edição, 2007. Prentice Hall.
- HAMBRICK, G. et al. Persistence in the Enterprise: A Guide to Persistence Technologies; 1ª edição, 2008. IBM Press.
- ELMASRI, R.; NAVATHE, S. B. Sistemas de banco de dados. 4ª edicao, 2009. Pearson/Addison-Wesley.
- Complementar
- Caelum FJ-11 - Java e Orientação a Objetos (PDF - HTML)
- MARQUESONE, Rosangela. Big Data:Técnicas e tecnologias para extração de valor dos dados. São Paulo, SP: Casa do Código, [2016].
- WHITE, Tom. Hadoop: the definitive guide. California: O´Reilly, 2009. xix, 501 p. ISBN 9780596521974 (broch.).
- AMBLER, S.W., SADALAGE, P.J. Refactoring Databases: Evolutionary Database Design. 1a edição, 2011. Addison Wesley.
- SILBERSCHATZ, A.; SUDARSHAN, S. Sistema de banco de dados. 2006. Campus.
- LYNN, B. Use a cabeça! SQL. 1ª edição, 2008. ALTA BOOKS.
- HITZLER, P., KRÖTZSCH, M., and RUDOLPH, S. (2009). Foundations of Semantic Web Technologies. Chapman & Hall/CRC.
- ANTONIOU, G. and HARMELEN, F. (2008). A Semantic Web Primer. Second Edition,Cambridge, MIT Press, Massachusetts.
- HEATH, T. and BIZER, C. (2011). Linked Data: Evolving the Web into a Global Data Space. Morgan & Claypool, 1st edition.
- SMITH, Ben. JSON básico: conheça o formato de dados preferido da web. São Paulo: Novatec, 2015. 400 p. ISBN 9788575224366 (broch.).
- MongoDB Manual
- The Little MongoDB Book by Karl Seguin
- E-book gratuito sobre como montar um servidor gratuito por um ano na Amazon Web Services
Listas de Exercícios (a entrega deverá ser realizada pelo SIPPA)
- Lista de Exercícios 01 (prazo final para entrega: 28/08/2017 - segunda-feira até às 23:59)
- Crie uma aplicação Web ou Desktop para:
- Receber os dados de contato de uma pessoa (nome, endereço, telefone, email) e salvar ao final de um arquivo CVS chamado contatos.csv.
- Mostrar os dados de todos os contatos existentes no arquivo contatos.csv.
- Configurar a pasta de armazenamento do arquivo contatos.csv a partir de um arquivo config.properties.
- Por padrão, o arquivo contatos.csv deve ser armazenado na pasta raiz do usuário do sistema operacional.
- Sugestão: crie uma aplicação Web usando o Spring Boot.
- Lista de Exercícios 02 (prazo final para entrega: 04/09/2017 - segunda-feira até às 23:59)
- Crie em Java programas equivalentes aos seguintes:
- Baixe um arquivo csv com tamanho maior ou igual a 1 GB e use-o nas questões a seguir.
- Envie o link usado para baixar o arquivo csv.
- Compare os tempos de execução do seu programa Java com os utilitários originais (cat, head, wc).
- Encripte o arquivo csv com o utilitário gpg.
- Gere as somas md5 e sha1 do arquivo encriptado.
- Compacte o arquivo original usando compressões zip, gzip, bzip2, rar e 7zip. Depois disso compare os tempos e tamanhos dos arquivos gerados.
- Escreva uma aplicação para ler um arquivo binário origem e gravá-lo em outro arquivo (arquivo destino).
- Os nomes dos arquivos (origem e destino) devem ser definidos na chamada da aplicação.
- A leitura e gravação devem ser realizadas em blocos de bytes.
- Ao final, deve-se exibir o tempo total da cópia em milisegundos, caso a cópia tenha sido bem sucedida.
- Teste vários tamanhos de bloco e encontre um tamanho que ofereça um bom desempenho. Crie uma tabela para comparar os resultados encontrados.
- Lista de Exercícios 03 (prazo final para entrega: 11/09/2017 - segunda-feira até às 23:59)
- Crie uma aplicação para extrair dados de produtos da página principal de um portal de vendas, como por exemplo o site https://www.americanas.com.br/. Os dados devem ser extraídos do site de vendas e armazenados em um arquivo CSV.
- Sugestão: usar o jsoup para extração de dados.
- Baixe o XML de um dos seguintes links (link1, link2) e partir dele, usando DOM ou SAX da API do Java para ler o XML, gere um arquivo CSV com as informações mais importantes do XML.
- Baixe um PDF a partir do seguinte link e gere com o Tabula um csv a partir de alguma tabela presente no PDF.
- Use a API do Java para validar um XML a partir de um XML Schema. Dica: use javax.xml.validation.Validator.
- Lista de Exercícios 04 (prazo final para entrega: 18/09/2017 - segunda-feira até às 23:59)
- A API completa da câmara dos deputados está descrita em https://dadosabertos.camara.leg.br/swagger/api.html.
- É possível, por exemplo, acessar dados sobre os deputados federais a partir do seguinte endereço:
- https://dadosabertos.camara.leg.br/api/v2/deputados?ordem=ASC&ordenarPor=nome
- E a partir do comando abaixo é possível obter esses dados em formato JSON e salvá-los em um arquivo:
- curl -X GET "https://dadosabertos.camara.leg.br/api/v2/deputados?ordem=ASC&ordenarPor=nome" -H "accept: application/json" > deputados.json
- Salve o arquivo JSON, conforme mencionado acima.
- Formate o JSON através do plug-in do Sublime chamado Pretty JSON e salve-o em seguida.
- Para instalar o plugin: Ctrl + Shift + P -> Install Package -> Procure por Pretty JSON e instale-o.
- Para formatar o JSON use: CTRL + ALT + J (Windows/Linux).
- Crie uma classe Java para baixar através do Java/Jackson o JSON acima descrito a partir da URL original e não do arquivo salvo na questão anterior. Depois disso, serialize o JSON para objetos Java. OBS: É preciso criar as classes Java para representar adequadamente a estrutura do JSON original.
- Dica: use o mapper.readValue(jsonUrl, MyClass.class).
- Crie uma classe Java para serializar os objetos criados na questão 2 contendo os dados do JSON.
- Serialize e salve em um arquivo usando a serialização padrão do Java.
- Serialize e salve em um arquivo usando a serialização formatada JSON do Jackson. Ou seja: o arquivo deve ser salvo formatado.
- Dica: Use o mapper.defaultPrettyPrintingWriter().writeValueAsString(json) do Jackson.
- Crie uma classe Java para deserializar e exibir os dados do primeiro arquivo criado na questão 3.
- Lista de Exercícios 05 (prazo final para entrega: 25/09/2017 - segunda-feira até às 23:59)
- Faça uma pesquisa e responda:
- O que é BigData?
- O que é NoSQL?
- Qual a relação entre BigData e NoSQL?
- O que é NewSQL?
- Cite e explique o máximo de Vs relacionados à BigData que você descobrir (no mínimo 5).
- Cite e explique os principais modelos de dados usados por bancos NoSQL.
- Explique o teorema CAP.
- O teorema CAP tem sido questionado. Ele ainda é válido? Por que? Explique os contra-argumentos ao teorema CAP.
- Quais os modelos de programação mais usados com BigData? Explique brevemente cada um deles.
- Dica: leia o artigo deste link.
- Procure um arquivo texto bastante longo e conte quantas vezes cada palavra aparece no texto usando o modelo de programação chamado de Map/Reduce. O resultado deve ser escrito em um arquivo. O tutorial do link a seguir mostra os passos para implementar tal aplicação. Siga o tutorial e envie o arquivo final de saída com as contagens das palavras no arquivo inteiro.
- Lista de Exercícios 06 (prazo final para entrega: 09/10/2017 - segunda-feira)
- Crie uma aplicação que use um banco relacional contendo uma tabela de funcionários e seus dependentes, com suas respectivas classes Java. Cada funcionário deve ter um id, cpf, matrícula, nome, email e telefone. Cada dependente tem somente id, cpf e nome. Os campos id, cpf e matrícula devem não devem permitir duplicação, ou seja devem ser únicos. Existe uma associação entre funcionários e dependentes de modo que um funcionário pode ter vários dependentes, mas um dependente somente está vinculado a um único funcionário. As tabelas devem ser criadas a partir dos mapeamentos das classes através do JPA. Você deve criar 2 persistence units, um ligado a um banco de dados do PostgreSQL e outro ligado a um banco de dados do H2. Crie uma classe que centralize o uso de um ou outro persistence unit.
- Crie um DAO que representa uma interface única para persistência dos dados. Crie e use no DAO somente os métodos realmente necessários para a resolução desta lista. Crie-os sob demanda.
- Crie implementações JDBC e JPA para seu DAO.
- Crie uma classe para adicionar via DAO pelo menos 6 funcionários com seus dependentes no banco de dados. Pelo menos 50% dos funcionários devem ter dependentes.
- Crie e exiba o resultado de consultas JPQL, Criteria, Named Query e SQL Nativas via uso do DAO para cada uma das consultas abaixo:
- a) Mostrar os nomes e todos os dependentes com nomes iniciador por uma determinada letra, juntamente com o nome do funcionário ao qual ele depende. A letra inicial deve ser um parâmetro nomeado da consulta.
- b) Mostrar todos os dados de todos os funcionários funcionários.
- Nas questões acima, use um Pool de conexões com no mínimo 3 e no máximo 10 conexões com o Banco de Dados tanto para JDBC, como para JPA.
- Crie uma transação com pelo menos 3 operações. Crie implementação para JDBC e para JPA. Faça com que a última operação por alguma restrição do banco de dados não funcione, e daí um rollback deve ocorrer.
- Instale e use o plugin Hibernate Tools (https://tools.jboss.org/features/hibernate.html) para executar as consultas da questão 5.
- Lista de Exercícios 07 (prazo final para entrega: 16/10/2017 - segunda-feira)
- Ainda com relação a JPA, mostre uma consulta sua da Lista 06 usando JPA e envolvendo mais de uma tabela, que é transformada em 2 ou mais comandos SQL. Depois, altere a consulta JPA para que ela gere apenas um único comando SQL. Ou seja: o objetivo da questão é a otimização de uma consulta através de JPA.
- Dadas as tabelas abaixo no modelo relacional, crie uma única coleção de documentos no MongoDB para representá-las. A coleção deve conter livros com suas respectivas editoras.
- Faça as seguintes consultas diretamente no MongoDB sobre a coleção criada:
- a) Obter os títulos e valores dos livros que possuem a string “Programação” em seu título.
- b) Obter os títulos e valores dos livros com preços acima de R$ 60,00. Os resultados devem ser ordenados em ordem decrescente pelo valor do livro.
- c) Obter os títulos dos livros e os nomes das suas respectivas editoras. Os resultados devem ser exibidos em ordem crescente pelo título do livro. Os livros que não possuem editora também devem aparecer na listagem.