Dicas

Dell DVD Store Sample Data Base: um Banco de Dados pronto para testes

Procurando por um Banco de Dados pronto para testes? Precisa de um modelo de dados relacional para implementar um laboratório, testar um novo framework, testar uma integração envolvendo acesso a banco de dados, provar um conceito ou algo do tipo? Quer fazer um benchmark do seu Banco de Dados para aplicar um Tuning específico? Data Base

Bom, eu precisei disso recentemente e, para poupar tempo resolvi “googlar” antes…

Eu poderia usar a criatividade e criar um modelo de domínio fictício para implementar um Banco de Dados na mão. Mas preferi usar um pronto e focar na ideia que estava querendo implementar.

Na Wiki do Postgres encontrei uma página que descreve e oferece várias opções de “Bancos de Dados de Exemplo”. Alguns com dados abertos de algumas agências governamentais e ONGs, outros para testes de performance (Benchmarks), outros com modelo de um determinado domínio de negócio. Os exemplos contemplam tabelas, relacionamento e integridade referencial , funções (Stored Procedures) e o melhor: dados pré carreados! \o/

Nessa Wiki encontrei uma referência para um Banco de Dados chamado “Dell DVD Store“. Trata-se de um Banco de Dados que implementa o modelo de domínio de uma loja de DVDs – básico né?! Bom, o que mais me interessa não é o modelo em si, mas a massa de dados. O Modelo do banco é composto por 8 tabelas e 6 funções (Stored Procedures).

O mais interessante deste exemplo é que ele é composto por um Kit que lhe permite gerar diferentes cargas de dados: small, medium e large. Veja a tabela abaixo com os tipos de carga disponível.

Database    Size     Customers             Orders   Products
Small      10 MB        20,000        1,000/month     10,000
Medium      1 GB     2,000,000      100,000/month    100,000
Large     100 GB   200,000,000   10,000,000/month  1,000,000

Com os scripts (Scripts Perl) disponíveis no Kit é possivel gerar uma massa de dados de 100GB. Excelente para testes de performance!

O Kit também oferece uma forma de gerar testes de carga simulando transações OLTP. E também oferece uma implementação de aplicação PHP e JSP para interagir com o Banco. Imagine a possibilidade dessa funcionalidade! Com isso você pode gerar uma carga real de transações e ao mesmo tempo testar o comportamento de sua aplicação neste cenário de carga na camada de dados…. Show né?!

Mais um detalhe importante: é possível gerar o Banco de Dados para diferentes SGBDs (Oracle, MS SQL Server, MySQL e Postgres).

Neste post descrevo os passos que executei para criar o Banco de Dados (tamanho small) em uma instalaçao do Postgres 9.4 que já possuia em uma VM rodando Red Hat Enterprise Linux 7. Caso queira explorar as demais opções do Kit, leia as instruções no arquivo ‘ds2/ds2.1_Documentation.txt

Acesse a página do exemplo (Dell DVD Store 2 Sample Database) e faça o download dos arquivos:

ds21.tar.gz
ds21_postgresql.tar.gz
readme.txt

Extraia os arquivos tgz e, um diretório temporário (ex: /tmp)

cd /tmp
tar -zxvf ds21.tar.gz
tar -zxvf ds21_postgresql.tar.gz

Para carregar criar o DB (small) no Postgres 9 abra o arquivo ‘/tmp/ds2/pgsqlds2/ds2_pgsql_readme.txt
e siga as instruções a partir do tópico ‘On PostgreSQL machine

sudo su - postgres

-bash-4.2$ createuser -d -l -P --interactive ds2
Enter password for new role: 'ds2'
Enter it again: 'ds2'
Shall the new role be a superuser? (y/n) y

Altere o arquivo ‘/var/lib/pgsql/9.4/data/pg_hba.conf‘ para permitir que usuários locais (do sistema operacional) possam se conectar ao postgres
Mude o valor da coluna ‘METHOD‘ de ‘ident‘ para ‘trust

vim /var/lib/pgsql/9.4/data/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD

# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust

volte para o shell anterior e reinicie o serviço do Postgres

sudo systemctl stop postgresql-9.4.service
sudo systemctl start postgresql-9.4.service

teste a conexão com o banco

psql -h localhost -p 5432 -U ds2 -d postgres
psql (9.4.1)
Type "help" for help.

postgres=# \q

acesse o diretório ‘/tmp/ds2/pgsqlds2

Ctrl + D
cd /tmp/ds2/pgsqlds2

altere o script ‘pgsqlds2_create_all.sh’

onde está

'createlang plpgsql ds2'

altere por

'createlang plpgsql $CONNSTR -d $DBNAME -U $SYSDBA'

execute o Script shell para carregar os dados

bash pgsqlds2_create_all.sh

A seguinte saída deve aparecer na console

NOTICE: database "ds2" does not exist, skipping
DROP DATABASE
CREATE DATABASE
ERROR: role "ds2" already exists
ALTER ROLE
ERROR: relation "customers" does not exist
ERROR: relation "orders" does not exist
ERROR: relation "orderlines" does not exist
ERROR: relation "cust_hist" does not exist
...
CREATE TABLE
CREATE TABLE
CREATE TABLE
...
COPY 5010
COPY 4942
COPY 5010
COPY 5163
COPY 4992
COPY 4951
ALTER TABLE
ALTER TABLE
COPY 10000
ALTER TABLE
ALTER TABLE
COPY 10000
ALTER TABLE
CREATE INDEX
CREATE INDEX
CREATE INDEX
...
CREATE ROLE
GRANT
GRANT
GRANT
ANALYZE

O Banco de Dados ‘ds2‘ foi gerado com o seguinte Schema

DVD Store Release 2 Database Schema
-----------------------------------

Table Columns Number of Rows (Large database)
----- ------- -------------------------------

Customers CUSTOMERID 200 million
FIRSTNAME
LASTNAME
ADDRESS1
ADDRESS2
CITY
STATE
ZIP
COUNTRY
REGION
EMAIL
PHONE
CREDITCARDTYPE
CREDITCARD
CREDITCARDEXPIRATION
USERNAME
PASSWORD
AGE
INCOME
GENDER

Orders ORDERID 120 million
ORDERDATE
CUSTOMERID
NETAMOUNT
TAX
TOTALAMOUNT

Orderlines ORDERLINEID 600 million
ORDERID
PROD_ID
QUANTITY
ORDERDATE

Cust_Hist CUSTOMERID 600 million
ORDERID
PROD_ID

Products PROD_ID 1 million
CATEGORY
TITLE
ACTOR
PRICE
SPECIAL
COMMON_PROD_ID

Inventory PROD_ID 1 million
QUAN_IN_STOCK
SALES

Reorder PROD_ID variable
DATE_LOW
QUAN_LOW
DATE_REORDERED
QUAN_REORDERED
DATE_EXPECTED

Categories CATEGORY 16
CATEGORYNAME

Execute um o seguinte comando SQL para testar o Banco de Dados criado:

psql -h localhost -p 5432 -U ds2 -d ds2
ds2=# select count(*) from customers;
count
-------
20000
(1 row)

Após a criação e carga inicial a tabela ‘CUSTOMERS‘ possui 20 mil registros.

Por enquanto é isso.

Em um próximo post pretendo explorar os scripts de carga disponíveis no Kit.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s