• Nenhum resultado encontrado

TESTE DE PERFORMANCE DO BANCO DE DADOS SQLITE

N/A
N/A
Protected

Academic year: 2021

Share "TESTE DE PERFORMANCE DO BANCO DE DADOS SQLITE"

Copied!
7
0
0

Texto

(1)

TESTE DE PERFORMANCE DO BANCO DE DADOS SQLITE Rodrigo Luiz Pereira Lara1,

Aedra Marciana Virgílio2, Leacir Nogueira Bastos3, Brauliro Gonçalves Leal4

RESUMO: Foi feita uma avaliação de performance do gerenciador de banco de dados SQLite 3.4.1 ao executar 20 blocos de 500 mil operações (insert, select e update). A duração média das operações unitárias (DOU) de insert, select e update foram iguais a 2,66026, 0,48978 e 0,00102s, respectivamente. As equações ajustadas para os valores de duração acumulada das operações (DAO) em função do número de operações (NOP) foram DAO = 69273 × NOP, com R² = 0,9974 para as operações de insert; DAO = 2348,5 × NOP, com R² = 0,971, para as operações de select; e DAO = 111,17 × NOP² - 930,28 × NOP, com R² = 0,718, para as operações de update. As operações de update e

select requereram, respectivamente, 0,04 e 18,41% do tempo de insert. Embora todas as

operações realizem acesso ao banco de dados, insert utilizam mais recursos computacionais uma vez que alteram substancialmente a estrutura do banco de dados, aumentando o número de registros e criando e atualizando índices. Update não aumenta o número de registros, porém pode alterar seus valores. Select por sua vez não alteram o banco. Os resultados indicaram que o banco de dados SQLite é mais eficiente quando armazena uma quantidade relativamente baixa de dados, tornando-se inviável para grande volume de dados.

PALAVRAS-CHAVE: banco de dados, open source, sql.

PERFORMANCE TEST OF DATABASE SQLITE

ABSTRACT: A SQLite 3.4.1 database was used to insert 20 blocks of 500 hundred data to verify the database performance in situations of insertion, selection and update. The average duration from the single operation insert, select and update were 2,66026, 0,48978 and 0,00102s respectively. The adjusted equations to the values of operations accumulated duration (DAO) in function of the number of operations (NOP) were DAO = 69273 × NOP, with R² = 0,9974 to insert operations; DAO = 2348,5 × NOP, with R² = 0,971, to select operations; and DAO = 111,17 × NOP² - 930,28 × NOP, with R² = 0,718, to update operations. Update and select operations require 0,04 and 18,41% of

insert time operation respectively. Although all operations have access to database, insert uses more computational resources since it substantially modifies the database

structure, increasing the number of registrations, creating and updating indices. Update doesn’t increase the number of registers, but it may alters its values. Select doesn’t modify the base.

1 Graduando em Ciência da Computação pela UFV, e-mail: rodrigo_lpl@yahoo.com.br

2 Bacharel em Sistemas de Informação pela UNIPAC 2005, e-mail: aedra.system@gmail.com

3 Professor do Departamento de Informática da UFV, Ph.D in Computer Science, e-mail: leacir@ufv.br

4 Doutor em Engenharia Agrícola pela UFV 1999, Diretor Científico do Grupo Intec, e-mail: leal@

(2)

KEYWORDS: database, open source, sql

INTRODUÇÃO:

Bancos de dados são estruturas que armazenam dados. São úteis para manipulação de registros, permitindo acessar, modificar, incluir e remover dados. Os bancos de dados, em geral, são gerenciados por Sistemas de Gerenciamento de Banco de Dados (SGBD) cujo principal objetivo é retirar da aplicação cliente a responsabilidade de gerenciar o acesso, manipulação e organização dos dados.

SQLite é uma biblioteca C que implementa um banco de dados relacional. Sistemas que a utilizam não necessitam de servidor para acessar seus dados, ou seja, ela lê e escreve diretamente em seus arquivos. Exemplos de uso do SQLite são sites (com menos de cem mil requisições por dia), dispositivos e sistemas embarcados, aplicações desktop entre outros.

O presente trabalho visa testar através da biblioteca lt++ a performance do banco de dados SQLite em função de múltiplas inserções, seleções e atualizações de dados por um determinado período de tempo.

MATERIAIS E MÉTODOS:

Criou-se uma tabela indexada com os campos conforme descritos na Tabela 1 abaixo:

Campo Tipo

A0 INTEGER NOT NULL

A1 INTEGER A2 NUMERIC(15,2), A3 NVARCHAR(26) A4 VARCHAR(26) A5 TIME A6 DATE

Tabela 1 – Campos inseridos no banco de dados

Foi desenvolvido um programa em C++ para realizar 10 milhões de operações

insert, select e update. O desempenho foi analisado através da duração acumulada das

operações e da duração média da operações unitárias por bloco de insert, select e update em função do número de operações.

Utilizou-se a biblioteca lt++ para conexão com banco de dados SQLite. Foi utilizada uma máquina com as seguintes configurações: CPU Pentium 4, 2.80GHz e 1,0GB de RAM.

RESULTADO E DISCUSSÃO:

A Tabela 2 apresenta a duração acumulada das operações (DAO) e a duração média das operações unitárias (DOU) por bloco de insert, select e update em função do número de operações.

(3)

Os valores da DAO variaram de 58355 a 1421079s; 2578 a 42654s; e 341 a 39398s para as operações de insert, select e update, respectivamente. Por outro lado, os valores médios da DOU para as operações insert, select e update foram iguais 2,66026; 0,48978; e 0,00102s, respectivamente. As figuras 1.a, 1.c e 1.e mostram os gráficos da variação dos valores do DAO em função do número de operações insert, select e

update, respectivamente. As figuras 1.b, 1.d, 1.f mostram os gráficos da variação dos

valores do DOU em função do número de operações insert, select e update, respectivamente. As figuras 1.a, 1.c e 1.e também apresentam equações ajustadas para os valores do DAO em função do número de operações; sendo DAO = 69273 × NOP, com R² = 0,9974 para operações de insert; DAO = 2348,5 × NOP, com R² = 0,971 para operações de select; e DAO = 111,17 × NOP² - 930,28 × NOP, com R² = 0,718 para operações de update.

NOP (× 500000)

Inserções Seleções Alterações

DAO (s)

DOU (s/insert)

DAO

(s) (s/select)DOU DAO(s) (s/update)DOU

1 58355 2,33420 2578 0,51560 341 0,00068 2 119828 2,39656 5200 0,52000 682 0,00068 3 184506 2,46008 7804 0,52027 1022 0,00068 4 250543 2,50543 10263 0,51315 1364 0,00068 5 318896 2,55117 12694 0,50776 1707 0,00068 6 387748 2,58499 14991 0,49970 2051 0,00068 7 456859 2,61062 17354 0,49583 2395 0,00068 8 527769 2,63885 19677 0,49193 2739 0,00068 9 599152 2,66290 22073 0,49051 3082 0,00068 10 670243 2,68097 24429 0,48858 3423 0,00068 11 744181 2,70611 26961 0,49020 3766 0,00068 12 817794 2,72598 29526 0,49210 4110 0,00069 13 891441 2,74290 32201 0,49540 4453 0,00069 14 965653 2,75901 34979 0,49970 4794 0,00068 15 1039309 2,77149 37670 0,50227 5136 0,00068 16 1114427 2,78607 40203 0,50254 5478 0,00068 17 1190871 2,80205 42654 0,50181 5820 0,00068 18 1266740 2,81498 37670 0,41856 16664 0,00185 19 1343625 2,82868 40203 0,42319 28092 0,00296 20 1421079 2,84216 42654 0,42654 39398 0,00394 Média - 2,66026 - 0,48978 - 0,00102

Tabela 2 – Duração acumulada das operações (DAO) e a duração média das operações unitárias (DOU) por bloco de insert, select e update e função do número de operações (NOP).

(4)

y = 69273x R2 = 0,9974 0 200000 400000 600000 800000 1000000 1200000 1400000 1600000 2500 0 7500 0 1250 00 1750 00 2250 00 275 000 3250 00 3750 00 4250 00 475 000 Num operações D u ra ç ão d a o p era çã o ( s ) (a) 0,00000 0,50000 1,00000 1,50000 2,00000 2,50000 3,00000 2500 0 750 00 1250 00 1750 00 2250 00 275 000 3250 00 3750 00 4250 00 475 000 Num operações D u ra ç ão d a o p era çã o ( s ) (b) y = 2348,5x R2 = 0,971 0 5000 10000 15000 20000 25000 30000 35000 40000 45000 50000 50001000 0 1500 0 2000 0 2500 0 3000 0 3500 0 400004500 0 5000 0 5500 0 6000 0 6500 0 7000 0 7500 0 8000 0 8500 0 9000 0 9500 0 1000 00 Num ope raçõe s

D u ra çã o d a o p era çã o ( s) (c) 0,00000 0,10000 0,20000 0,30000 0,40000 0,50000 0,60000 5000 15000 2500 0 3500 0 4500 0 5500 0 6500 0 7500 0 8500 0 9500 0

Num ope raçõe s

D u ra çã o d a o p era çã o ( s) (d) y = 111,17x2 - 930,28x R2 = 0,718 0 5000 10000 15000 20000 25000 30000 35000 40000 5000 00 1500 000 2500 000 3500 000 4500 000 5500 000 6500 000 7500 000 8500 000 9500 000 Núm ero de Operações D u ra çã o ( s) (e) y = 9E-05x + 9E-05 R2 = 0,3528 0,00000 0,00050 0,00100 0,00150 0,00200 0,00250 0,00300 0,00350 0,00400 5000 00 1500 000 2500 000 3500 000 4500 000 5500 000 6500 000 7500 000 8500 000 9500 000 Núm e ro de Ope raçõe s D u ração ( s) (f) FIGURA 1

Das três operações avaliadas a que apresentou maior tempo de execução foram as de insert, seguida pelas de update que, por sua vez exigiram mais tempo que as de

select. As operações de update e select requereram, respectivamente, 0,04 e 18,41% do

tempo que as de insert. Embora todas as operações realizem acesso ao banco de dados,

insert utilizam mais recursos computacionais uma vez que alteram substancialmente a

estrutura do banco de dados, aumentando o número de registros e criando e atualizando índices. Update não aumenta o número de registros, porém podem alterar seus valores.

Select, por sua vez, não alteram o banco. O tamanho do banco de dados vazio era de 4

Kb, ao final das inserções o seu tamanho era de 1065863 Kb, sendo assim a média de Kbytes por registros e controles inerentes ao banco de dados foi de 0,1065863 Kb / registro.

Conforme pode-se observar nas Figuras 1.a, 1.c e 1.e, os valores de DAO variaram de modo linear para as três operações. A operação update se comporta de modo linear até um certo limite de dados no banco (8,5 milhões de dados). Estes

(5)

resultados indicam que o tempo de execução de uma operação update depende do número de registros no banco, quanto maior o banco mais demorado se torna.

CONCLUSÃO:

Avaliou-se a performance do SQLite 3.4.1 ao executar 10 milhões de operações (insert, select, update), cuja durações médias foram de 2,66026, 0,48978 e 0,00102s para insert, select e update respectivamente. Operações de update e select requerem 0,04 e 18,41% do tempo de insert, respectivamente.

As equações ajustadas para os valores duração acumulada das operações (DAO) em função do número de operações (NOP) foram DAO = 69273 × NOP, com R² = 0,9974 para as operações de insert; DAO = 2348,5 × NOP, com R² = 0,971, para as operações de select; e DAO = 111,17 × NOP² - 930,28 × NOP, com R² = 0,718 para a operação de update.

Pode-se observar que o banco de dados SQLite é de fato um banco de dados mais eficiente quando armazena uma quantidade relativamente baixa de dados.

Devido ao seu crescimento acentuado de duração na atualização em função do tempo decorrido, concluiu-se que esse banco de dados é inviável quando trabalha com altas quantidades de dados uma vez que perde na sua eficiência.

BIBLIOGRAFIA:

[1] ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados - Fundamentos e Aplicações, 3° edição, Editora LTC, 2002

[2] SQLite. Disponível em http://sqlite.org

[3] SQLite. Disponível em: http://pt.wikipedia.org/wiki/SQLite Acesso: 10 Set 2007. [4] SQLite Brasil. Disponível em http://www.dicas-l.com.br/dicas-l/20050212.php Acesso: 05 Out 2007

ANEXO 1:

Resumo do código utilizado:

// ---# include <stdio.h> # include <time.h> # include "ltQuery.h" # include "ltDriver.h" # define NBLOCO 20 # define BLOCO 500000 string itos ( int x ) {

(6)

char sz[22];

sprintf( sz, "%d", x ); return sz;

}

int main (int argc, char **argv) { time_t ini = time(NULL); int c = 1;

ltDriver *db = new ltDriver(); ltQuery *Query = new ltQuery();

if( db->Attach("lt++.db") ) printf("\n..."); Query->Open ( db->db );

ini = time(NULL);

FILE *f = fopen ("insert.txt","w"); for( int k = 0; k < NBLOCO; k++ ) {

for( int i = 0; i < BLOCO; i++ ) {

Query -> Sql ("insert into A (A1, A2, A3, A4, A5, A6) values (1, 1.2, 'aaaaa', 'aaaaa', '11:11:11', '2007-09-23')"); c++;

}

fprintf (f, "\n%d; %9f", k+1, difftime (time(NULL), ini)); }

fclose(f); c = 1;

ini = time(NULL);

f = fopen("select.txt","w");

for( int k = 0; k < NBLOCO; k++ ) { for( int i = 0; i < BLOCO; i++ ) {

// printf("\nselect * from A where A0=%d", c ); Query->Sql("select * from A where A0=" + itos(c) ); c++; } fprintf(f,"\n%d;%9f",k+1, difftime(time(NULL),ini)); } fclose(f); c = 1; ini = time(NULL); f = fopen("update.txt","w");

(7)

for( int k = 0; k < NBLOCO; k++ ) { for( int i = 0; i < BLOCO; i++ ) {

// printf("\nselect * from A where A0=%d", c );

Query -> Sql ("update A set A1=1, A2=1.2, A3='aaaaa',

A4='aaaaa', A5='11:11:11', A6='23.09.2007' where A0=" + itos(c) ); c++; } fprintf(f,"\n%d;%9f",k+1, difftime(time(NULL),ini)); } fclose(f); db->Detach(); delete Query; delete db; system("pause"); return 0; }

Referências

Documentos relacionados

Quando analisamos o peso molecular das bandas de proteínas urinárias verificamos que nas gestantes com manifestação de pré-eclâmpsia, isolada ou superposta à hipertensão

A não uniformização quanto ao método de referência pode promover diferenças entre as curvas de calibração geradas por laboratórios de dosimetria citogenética, que podem

Esse foco teve de ser calibrado, considerando as características e os posicionamentos práticos e ideológicos que condicionam os rumos da educação e também o monopólio

Este presente artigo é o resultado de um estudo de caso que buscou apresentar o surgimento da atividade turística dentro da favela de Paraisópolis, uma

seria usada para o parafuso M6, foram utilizadas as equações 14 e 15, referentes aos parafusos de 8 mm de diâmetro e folga entre parafuso e furo de 0,5 mm, que definem,

No entanto, os resultados apresentados pelo --linalol não foram semelhantes, em parte, aos do linalol racêmico, uma vez que este apresenta um efeito vasorelaxante em anéis de

Resumo: O presente trabalho corresponde a um estudo empírico descritivo e exploratório que aborda comportamentos e falas de atores políticos que participaram do processo legislativo

As micotoxinas são compostos químicos tóxicos provenientes do metabolismo secundário de fungos filamentosos e conhecidas pelos danos causados à saúde humana e