DatabaseCast 64: Atualização de versão

VitrineDatabaseCast64

Olá, pessoal! Neste episódio, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e o convidado Ricardo Rezende (@ricarezende) reservam seus horários de trabalho para atualizar a versão do banco de dados.

Você vai aprender como convencer o CEO a atualizar de versão, bater o pé e esperar um novo release, planejar a migração e atualização, bater o seu recorde de horas trabalhadas no carnaval e amaldiçoar quem mudou um script de sistema do Oracle.

Links do episódio:

Não deixe de nos incentivar digitando o seu comentário no final deste artigo, mandando um e-mail para  databasecast@gmail.com, seguindo o nosso twitter @databasecast, vendo informações de bastidores e as músicas do programa no nosso Tumblr e curtindo a nossa página no Facebook e no Google+ e assistindo aos nossos episódios no YouTube. Acesse o feed RSS do DatabaseCast neste link.

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)

CAPA_AMAZON_REDUZIDA_BLOGcover_front_medium

Você pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link. Veja também:

feed-rss1

Veja no gráfico abaixo a duração e os tempos aproximados de início e fim de cada bloco:

TamanhoEp64

Veja na tag cloud abaixo a contagem das palavras mais usadas nos e-mails, comentários e tweets do episódio anterior:

TagCloudEp64

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)



Publicado em DatabaseCast, Podcast | Com a tag , , , , , , , , | Deixar um comentário

Gerando dados com DataFiller

Figura1_CapaPostRecentemente um colega da área postou um concurso para incentivar a comunidade PostgreSQL a escrever artigos. Neste post vou apresentar a minha participação descrevendo a experiência que tive ao utilizar a ferramenta DataFiller para gerar dados de teste no PostgreSQL.

O meu colega Fábio Telles é um especialista em no SGBD PostgreSQL que, inclusive, já até participou de um episódio do DatabaseCast onde falamos sobre história deste banco de dados. Recentemente ele publicou no seu blog (http://savepoint.blog.br/concurso-melhor-artigo-sobre-postgresql/) um concurso para incentivar a comunidade a escrever artigos sobre o PostgreSQL.

Apesar de eu não utilizar muito este banco de dados, resolvi participar escrevendo este post. Dentre as opções sugeridas eu escolhi falar sobre a ferramenta de geração de dados de teste chamada DataFiller (https://www.cri.ensmp.fr/people/coelho/datafiller.html). Este tópico me interessou porque já escrevi sobre ferramentas para geração de dados no artigo “Criando uma base de dados de teste” publicado na revista SQL Magazine número 83 e escolhido para ser a capa desta edição da revista.

Figura2_capaSQL83_GLogo que abri a página do projeto e estudei um pouco o conteúdo vi que o DataFiller é uma ferramenta que assume a forma de um script. Com um PostgreSQL 9.4 instalado em uma das minhas máquinas virtuais rodando o Ubuntu 15 logo fiz o download utilizando o wget e coloquei a permissão no script com o chmod.

$wget https://www.cri.ensmp.fr/people/coelho/datafiller
$chmod 777 datafiller

O objetivo desta ferramenta é gerar dados de teste para preencher bases de dados. Ele faz isso de uma maneira um pouco incomum: através da alteração do arquivo que contém a definição das tabelas. As alterações no script basicamente se resumem à colocação de comentários especiais que vão indicar detalhes da geração de dados, tais como a quantidade e o formato.

Antes de abrir um script eu tentei rodar um dos exemplos do tutorial que utilizam o parâmetro –test. Eu criei uma nova base no PostgreSQL chamada library e rodei o comando abaixo, que consta na documentação do projeto:

$./datafiller --test=library -T --size=1000 | psql libray

Infelizmente eu tive um erro indicando que eu deveria fornecer um generator, como a figura abaixo mostra. Bem, analisando a documentação não entendi muito bem este erro e fiquei com a impressão que faltou algo a ser indicado neste exemplo.

Figura3_ErroVoltei meus esforços para a modificação de um script simples. Eu criei uma tabela chamada test com um campo do tipo serial e forneci o comentário – df: multi=2. É importante destacar que este comentário foi colocado no final da linha que contém o comando create table, como indicado abaixo.

CREATE TABLE test( -- df: mult=2
id serial PRIMARY KEY
);

O parâmetro mult=2 vai indicar quantas linhas vão ser colocadas na tabela. Na verdade, ele vai indicar o fator multiplicador do valor do parâmetro –size indicado na chamada do DataFiller. Por exemplo, se a chamada abaixo utilizar o valor 1000 ao final da execução do script 2000 linhas (1000* o fator 2) vão ser inseridas na tabela. A propósito, o script que o DataFiller gera como resultado da sua execução criou um novo objeto sequence para preencher os dados da minha tabela de teste. A chamada ficou assim:

$datafiller --size=10 test.sql > test_data.sql

E o conteúdo do arquivo test_data.sql ficou assim:

-- data generated by ./datafiller version 2.0.0 (r792 on 2014-03-23) for postgr$
-- fill table test (20)
\echo # filling table test (20)
COPY test (id) FROM STDIN (ENCODING 'UTF-8');
1
2
3
4
5
6
7
8
9
10
...
20
\.
-- restart sequences
ALTER SEQUENCE test_id_seq RESTART WITH 21;
-- analyze modified tables
ANALYZE test;

Depois de rodar o novo script no banco de destino (que precisa ter a tabela já criada) verifiquei que a inserção foi feita sem problemas. Sem grandes dificuldades até aqui.

Também fiz alguns testes com a geração de strings para colunas com conteúdo de caracteres. Para isso eu empreguei o gerador de texto que permite, entre outras opções, utilizar expressões regulares. Como exemplo, fiz a geração de dados para uma coluna com 10 caracteres gerados aleatoriamente dentro o intervalo A-Z. O meu script com a definição da tabela ficou assim:

CREATE TABLE test( -- df: mult=2
id serial PRIMARY KEY,
titulo text not null --df: chars='A-Z' length=10 lenvar=0
);

A chamada do programa DataFiller na linha de comando foi idêntica e não tive nenhum problema para gerar os dados. Até aqui, o DataFiller funcionou bem e recomendo ele para quem trabalha exclusivamente com a linha de comando e já contém os scripts do banco. A propósito, quem já possui os scripts do banco talvez possa ter trabalhado relativamente grande para alterá-los e incluir os comentários necessários para indicar como será a geração de dados.

Figura2_GenerateDataOutras ferramentas semelhantes são mais limitadas, porém elas não exigem a modificação do script a definição das tabelas. Por exemplo, o site Generatedat.com permite a especificação de detalhes para a geração de dados e fornece arquivos que podem ser importados. Contudo, este site não faz nenhuma integração com o banco de dados e possui poucas opções de customização.

Alias, o DataFiller brilha neste sentido: é possível customizar diversas opções para geração de dados. Dentre as várias opções, a que me chamou à atenção foi a possibilidade de gerar dados para tabelas relacionadas. Fiz alguns testes e verifiquei que é muito interessante poder indicar a proporção de dados que vão ser colocadas nas tabelas Pai e Filho de relacionamentos com cardinalidade 1:N. Certamente esta é uma das grandes vantagens do DataFiller que pode ajudar muito no dia a dia de quem tem que gerar dados e não quer se preocupar muito com o relacionamento das tabelas.

Em resumo, posso indicar o DataFiller para quem precisa gerar dados exclusivamente para ao PostgreSQL e já possui o esquema de criação das tabelas em um arquivo. Além disso, vale a pena destacar a versatilidade e possibilidade de geração para valoreis incluindo a indicação de proporções, valores médios e distribuições (normal, exponencial, pareto, etc) para os dados das colunas. Estes recursos são muito importantes para quem deseja gerar dados de teste mais “reais” e próximos ao que pode-se encontrar em uma base de produção.

Como sugestão, seria interessante que a ferramenta produzisse arquivos no formato CSV, XML ou JSON para facilitar a importação em outros tipos de bancos de dados. Também não seria uma má ideia alguma maneira de criar templates para indicar as mesmas configurações para várias tabelas, uma vez que alterar manualmente o script que a definição de muitas tabelas (modelos de dados “grandes”) pode ser uma tarefa muito tediosa e sujeita a erros.



Publicado em Programação, SQL | Com a tag , , , , , | Deixar um comentário

Retrospectiva de conteúdo em 2015

Figure1Em 2015 eu produzi muito conteúdo para a internet (e para fora dela). Neste post eu vou apresentar os conteúdos que mais gostei de criar.

Para facilitar a apresentação, resolvi dividir em categorias o material que produzi. Infelizmente nem todos estes conteúdos são abertos e disponibilizados gratuitamente, mas certamente eles geraram uma enorme satisfação quando eu vi o resultado final.

Artigo técnico

Em 2015 eu escrevi pouco para a revista SQL Magazine (se comparado com anos anteriores), mas mesmo assim tive alguns artigos que me deram muito prazer em escrever. O destaque vai para o modelo OLAP que montei para visualizar informações de restaurantes. Tive um trabalho relativamente simples para modelar, mas o resultado final ficou muito legal e acredito que pode ajudar muitos pequenos negócios a compreender melhor seus dados.

Post no blog

Os posts aqui no meu blog foram relativamente escassos. Eu cheguei até a fazer um esforço extra e publicar um post por dia durante uma semana, mas definitivamente não conseguir a quantidade e qualidade de conteúdo que planejei para 2015. De qualquer maneira, destaco o post sobre o que esperar de uma API do ponto de vista de um desenvolvedor.

Pocket vídeo

O formato de pocket vídeos que produzo para a DevMedia é muito interessante e até já falei sobre ele aqui no blog antes. Dentre os diversos vídeos que produzi neste formato em 2015, o meu preferido foi aquele que mostrei como comparar strings e realizar o Fuzzy Matching no SQL Server, uma vez que este SGBD não tem recursos próprios muito bons para realizar esta tarefa.

Vídeo aula

Em 2015 eu completei o curso em vídeo aulas sobre o MongoDB para a DevMedia. Dentre todas as vídeos aulas que produzi indico aquela que mais deu trabalho: como fazer o download, instalação e configuração do framework MEAN (MongoDB, Express.JS, Angulas.js e Node.js) junto com a descrição de um projeto MVC simples.

Artigo científico

O melhor artigo científico que produzi em 2015 foi sobre a usabilidade da urna eletrônica brasileira. Além de ter sido um artigo que apresentei em uma conferência internacional e que gerou uma boa discussão, ele permitiu que eu trabalhasse em conjunto com uma colega da área (a @talitapagani). Destaco também que este conteúdo mostra como é importante discutir aspectos importantes relacionados à urna eletrônica que vão além da segurança, impressão de votos e confidencialidade do processo eleitoral.

Episódio do DatabaseCast

Infelizmente em 2015 eu e meu amigo Wagner Crivelini não conseguimos alcançar a meta de 12 episódios do DatabaseCast publicados por ano. Contudo, tivemos vários episódios legais e o que eu mais gostei foi aquele onde conversei com meus colegas Nilton e Marcelo sobre implementação de alta disponibilidade.

Palestra

Todo ano eu faço questão de participar como palestrante em diversos eventos geralmente ligados à comunidade de uma determinada tecnologia. Este ano a minha palestra preferida foi no evento TDC 2015 onde falei sobre como lidar com dados temporais e intervalos com a linguagem SQL. Infelizmente a gravação da palestra não está disponibilizada para todos, mas o slides que utilizei estão neste link.

Projeto

O projeto mais importante na qual trabalhei em 2015 foi, sem sombra de dúvida, a minha tese de doutorado. Já entreguei ela na faculdade e estou aguardando a defesa para poder disponibilizar algum tipo de conteúdo relacionado à pesquisa. Fora isso, também destaco o projeto HTMA que desenvolvi para um concurso da Intel e que me rendeu muitos frutos.



Publicado em Evento, Programação | Com a tag , , , , , , , | Deixar um comentário

DatabaseCast 63: Engineered Systems

VitrineDatabaseCast63Neste episódio, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e o convidado Rodrigo Righetti fecham com a Oracle para discutir os Engineered Systems. Neste episódio, você vai aprender a diferença entre um banco de dados na nuvem, como on premisses ou appliance, como resolver o problema colocando mais hardware, se preparar para administrar o banco, o sistema operacional e o hardware e quebrar o cofrinho de moedas para comprar um Exadata.

Não deixe de nos incentivar digitando o seu comentário no final deste artigo, mandando um e-mail para  databasecast@gmail.com, seguindo o nosso twitter @databasecast, vendo informações de bastidores e as músicas do programa no nosso Tumblr e curtindo a nossa página no Facebook e no Google+ e assistindo aos nossos episódios no YouTube.

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)

CAPA_AMAZON_REDUZIDA_BLOG

cover_front_medium

Você pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link. Veja também:

feed-rss1

Veja no gráfico abaixo a duração e os tempos aproximados de início e fim de cada bloco:

GraficoTamanhoDatabaseCastEpisodio62

Veja na tag cloud abaixo a contagem das palavras mais usadas nos e-mails, comentários e tweets do episódio anterior:

TagCloudEp62

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)

Você pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link. Veja também:

Links do episódio:



Publicado em DatabaseCast, Podcast | Com a tag , , , , , , | Deixar um comentário

DatabaseCast 62: Banco de dados na sala de aula

VitrineDatabaseCast62Olá, pessoal! Neste episódio do DatabaseCast, Mauro Pichiliani (Twitter | Blog), Wagner Crivelini (@wcrivelini) e o convidado Pedro Antônio Galvão Junior (@JuniorGalvaoMVP) entram na sala de aula para por fim à bagunça. Neste episódio, você vai aprender onde e como banco de dados é ensinado dentro da sala de aula, discutir didática, observar comportamento, ser firme na disciplina, julgar o que é um professor bom ou ruim e saber como não deixar o professor com dor de cabeça.

NOVIDADE: Acessem o canal do DatabaseCast no YouTube!

youtube-1

Confira o preço promocional da camiseta do DatabaseCast Fluxo Matrix com tecido especial (tipo tradicional econômico) clicando aqui.

Camiseta DatabaseCast Fluxo MatrixVeja também a caneca Datas SQL com a sintaxe para manipulação de datas no Oracle, SQL Server, MySQL e PostgreSQL.

FINAL_FotoColocaoReal

Não deixe de nos incentivar digitando o seu comentário no final deste artigo, mandando um e-mail para  databasecast@gmail.com, seguindo o nosso twitter @databasecast, vendo informações de bastidores e as músicas do programa no nosso Tumblr e curtindo a nossa página no Facebook e no Google+.

feed-rss1

Veja no gráfico abaixo a duração e os tempos aproximados de início e fim de cada bloco:

GraficoTamanhoDatabaseCastEpisodio62

Veja na tag cloud abaixo a contagem das palavras mais usadas nos e-mails, comentários e tweets do episódio anterior:

TagCloudEp62

Livro Conversando sobre Banco de dados do Mauro Pichiliani (Impresso e PDF, EPUB e MOBI)

Você pode comprar a camiseta com estampa fractal Fluxo Matrix e Sonho Fractal diretamente neste link. Veja também:

Links do episódio:

Publicado em DatabaseCast, Podcast | Com a tag , , , , , , , , , | Deixar um comentário