UNIVERSIDADE ESTATUDAL DE MARINGÁ
Programa de Pós-graduação em desenvolvimento de sistemas
para web
João Eduardo Rosa da Fonseca
Visão comparativa de gravação de arquivos em sistema de
arquivos e em banco de dados utilizando servidor web
Maringá
2013
UNIVERSIDADE ESTATUDAL DE MARINGÁ
Programa de Pós-graduação em desenvolvimento de sistemas
para web
João Eduardo Rosa da Fonseca
Visão comparativa de gravação de arquivos em sistema de
arquivos e em banco de dados utilizando servidor web
Trabalho de conclusão do programa de pósgraduação em desenvolvimento de sistemas
web da universidade estatual de Maringá para
obtenção do título de especialista em
desenvolvimento web
Orientador: Munif Gebara Junior
Maringá
2013
2
A minha família e amigos,
Pela ajuda e incentivo durante minha trajetória
3
AGRADECIMENTOS
A todos que contribuíram para a realização deste trabalho, fica expressa
aqui a minha gratidão especialmente:
Ao professor Munif Gebara Junior, pela orientação, aprendizado e apoio
durante todo os momento necessários.
Aos meus colegas de classe durante toda trajetória do curso e pelas
amizades que permaneceram após o termino da etapa presencial.
Aos meus amigos que me apoiaram e me ajudaram de alguma forma após o
meu acidente de carro que ocorreu durante a etapa de escrita do presente trabalho,
em especial aos senhores Alessandro Willian e Ulter Witte que me receberam em
Florianópolis e me ajudaram.
Ao mestre e grande amigo Alex Mattos que leu e revisou o presente trabalho
por algumas vezes.
Ao senhor Edilson Hipolito, o qual eu conheci durante o curso e tive a honra
de ser seu padrinho de casamento.
Ao metallica e aos discos death magnetic e S&M, pink floyd e aos discos
dark side of the moon e pulse, assim como tantas outras bandas que compuseram
obras primas que me animaram durante a escrita deste trabalho.
A minha família que me apoiou sempre que necessário.
A todos que de alguma forma apoiaram para esta construção.
4
Visão comparativa de gravação de arquivos em sistema de arquivos e em
banco de dados utilizando servidor web
João Eduardo Rosa da Fonseca1
Resumo
O presente trabalho apresenta uma estudo de análise de comparação da
gravação de arquivo enviados pela web e armazenado de duas formas diferente, em
sistema de arquivo e em banco de dados. Para isso foram escolhidos quatro
diferentes banco de dados sendo três no modelo relacional e um do modelo NoSQL,
no caso dos modelos relacionais, foram escolhidos banco de dados com licenças do
tipo freeware, GPL, Comercial, que são os bancos de dados Postgres, MySql e
oracle, já no modelo NoSql foi escolhido o MongoDB. Os resultado obtidos mostram
que ambos os métodos de gravação de arquivos possuem suas vantagens e
desvantagens. Entre as vantagens apresentadas no caso dos bancos de dados
existem a manipulação de partes específicas dos arquivos, sistema de bakcup
incremental nativo do próprio gerenciados do banco de dados, melhor performance
na inserção e buscas dos dados no caso dos bancos NoSql. Já as desvantagens
nos bancos de dados estão no aumento do espaço de armazenamento, perda de
performance após a inserção de vários registros na tabela dos bancos relacionais.
Já a vantagens na gravação de arquivos no sistema de arquivos são a fácil
implementação, o arquivo ser uma cópia fiel ao arquivo de origem sem aumentar o
tamanho ou adicionar bytes de controle e a não instalação de um software
gerenciador. Já as desvantagens estão presente na hora de realizar backups,
comprar diferença de versões de arquivo, gerenciamento e localização de arquivos.
Palavra chave: banco de dados NoSql, banco de dados relacional, gravação de
dados.
5
LISTA DE FIGURAS
LISTA DE TABELAS
6
LISTA DE SIGLAS
ASCII – American Standard Code for Information Interchange
BLOB – Binary large object
CD – Compact disk
CLOB – Caracter larg object
DVD – Digital Versatile Disc
IBOPE – Instituto brasileiro de opinião pública e estatísticas
LOB – Large object
HTTP – Hypertext Transfer Protocol
NCLOB - National Character Large Object
NoSQL – Not only SQL
ORDBMS – object-relational database management system
PHP – Hypertext Preprocessor
SQL – Structured Query Language
SSD – Solid state disk
UOL – Universo on-line
7
SUMÁRIO
1.INTRODUÇÃO................................................................................. 11
2.DESENVOLVIMENTO........................................................................ 11
2.1.SOBRE CLIENTE/SERVIDORES........................................................ 11
2.2.SERVIDORES DE ARQUIVO............................................................ 12
2.3.SERVIDORES DE BANCO DE DADOS............................................... 12
2.4.SERVIDORES WEB........................................................................ 12
2.5.SOBRE ARQUIVOS........................................................................ 13
2.6.SOBRE BANCO DE DADOS............................................................. 13
2.6.1.RELACIONAIS............................................................................ 13
2.6.2.NÃO RELACIONAIS.................................................................... 14
2.7.SOBRE GRAVAÇÃO DE ARQUIVOS.................................................. 14
2.7.1.GRAVAÇÃO EM FILE SYSTEM...................................................... 14
2.7.2.GRAVAÇÃO EM BANCO DE DADOS.............................................. 14
2.7.2.1.ORACLE................................................................................. 15
2.7.2.2.MYSQL.................................................................................. 17
2.7.2.3.POSTGRESQL......................................................................... 17
2.7.2.4.MONGODB............................................................................. 17
3.CONSIDERAÇÕES FINAIS................................................................. 19
3.1.MYSQL........................................................................................ 19
8
3.1.1.POSTGRES................................................................................ 21
3.1.2.ORACLE.................................................................................... 21
3.1.3.MONGODB................................................................................ 21
4.RESULTADOS.................................................................................. 22
5.CONCLUSÃO................................................................................... 25
6.REFERÊNCIAS................................................................................. 26
1.
Introdução
Segundo reportagem do portal de tecnologia do UOL(Universo on-line) em 1 o
de novembro de 2012 com o título de “Ibope: internet no Brasil chega a 70,9 milhões
de pessoas em casa e no trabalho”, exibe dados coletados por pesquisas do
IBOPE(Instituto brasileiro de opinião pública e estatísticas) sobre o crescimento de
pessoas no Brasil que acessam a internet em casa e no trabalho, no mês de
setembro de 2012
esse número atingiu 70,9 milhões de usuários, sendo que
crescimento do números de usuários ativos em setembro de 2012 foi 1,4% maior em
relação a agosto do mesmo ano e 11% maior que no mesmo período de 2011. (UOL
notícias, 2013)
Em outra reportagem publicada no portal exame da editora abril em 02 de
junho de 2011 com o título: “Você sabe o tamanho da internet?”, que toma como
base os estudo visual networking index realizado pela cisco que afirma que “A
estimativa é de que, hoje, o trafego da internet produz por hora informações
suficientes para ser contidas em 7 milhões de DVDs (Exame.com, 2013). O estudo
realizado pela cisco ainda prevê que em 2015 o trafego por hora produza 966
exabytes de informação, o que daria para preencher 28 milhões de DVDs.
9
Essas duas reportagens mostra que popularização da internet por meio de
banda larga, e a quantidade de conteúdo produzido na internet mostra que cada vez
mais o armazenamento de grande capacidade de dados será necessária. Para esse
armazenamento existem diversas técnicas de recebimento, processamento e
armazenamento dos dados produzidos. Essas técnicas variam desde a gravação do
arquivo em uma pasta do sistema operacional, até do armazenamento dos dados e
documentos como registros de banco de dados.
2.
Desenvolvimento
Inicialmente para entendimento da diferença entre a gravação dos
documentos em forma de arquivos, é necessário entender a diferença básica entre
as duas forma de armazenamento, a em arquivo de sistema e como registro em
banco de dados.
A gravação de arquivos em sistema de arquivos(file system) originados de
uma requisição web é realizada é chamada de upload. O arquivo é envidado para
um servidor web via protocolo http, onde o servidor recebe e armazena o arquivo
em uma pasta no seu disco, nesse caso o usual é que no banco de dados fique
armazenado o nome do arquivo com o seu caminho físico em disco.
(Searchnetworking, 2013)
Já no upload e gravação de arquivo em banco de dados, o arquivo é
convertido uma cadeia de byte, cada banco de dados tem seu tipo de dado(data
type) para armazenar cadeias de bytes, essa cadeia de bytes é enviada para uma
coluna no banco de dados(Searchnetworking, 2013), dependendo do tamanho do
arquivo é possível ser armazenado em um só registo, mas em alguns data types tem
limitações de tamanho dos dados, fazendo assim que se use uma estratégia onde
10
arquivo é quebrado em várias cadeias de bytes e essas cadeias são inseridas em
vários registros no banco de dados. Quando o usuário requisita o arquivo, é
necessário que o registro ou registros sejam recuperado e convertido novamente
para arquivo através de um algoritmo.
2.1. Sobre Cliente/servidores
Na arquitetura cliente/servidor, o servidor seria o responsável pelo controle e
centralização
de
informações
que
são
compartilhadas
e
acessadas
por
computadores em uma rede, os computadores que fazem o acesso ao servidor são
nomeados de clientes. segundo Júlio Battisti : “É uma arquitetura onde o
processamento da informação é dividido em módulos ou processos distintos. Um
processo é responsável pela manutenção da informação (Servidor), enquanto que
outro é responsável pela obtenção dos dados (Cliente)” (BATTISTI, 2001).
Assim sendo, a arquitetura de cliente servidor pode ser utilizado tanto na
forma de gravação de arquivos via file system, assim como na gravação de arquivos
em banco de dados. também é necessário entender que para que a arquitetura de
cliente/servidor funcione de forma eficiente, há um componente vital entrer o cliente
e o servidor, que é a infraestrutura de rede. Essa infraestrutura de rede influencia
diretamente na performance de subira(Upload) e descida(Download) dos arquivos
do servidor para o cliente, assim sendo, uma rede melhor estruturada, com
equipamentos de alta velocidade, ou mesmo a utilização de serviços de banda largar
no caso da internet fazem com que arquivos sejam enviado e recuperado no
servidor de forma mais ágil e rápida. Outra coisa que influencia na velocidade é o
poder de processamento do servidor, a quantidade de memória e quantos acessos o
servidor está recebendo no instante da recuperação de arquivos. Pois quanto maior
o número de acessos, maior é o consumo de memória do servidor e maior é o
11
consumo da banda da rede, tornado assim mais lento o acesso e recuperação do
arquivo armazenado no servidor . Segue a ilustração da arquitetura cliente/servidor.
Figura - Arquitetura cliente/servidor
Fonte :Cliente/Servidor, 2013
Nos próximos capítulos iremos explorar mais a fundo o funcionamento de
toda a estrutura da arquitetura cliente/servidor.
2.2. Servidores de arquivo
Segundo o site da microsoft sobre servidores de arquivo: “O servidor de
arquivos fornece um ponto centralizado na rede para armazenamento e
compartilhamento de arquivos entre os usuários. Quando desejarem usar um
arquivo importante, como um planejamento de projeto, os usuários podem acessá-lo
diretamente no servidor de arquivos, em vez de precisarem repassar o arquivo entre
cada computador. Se os usuários da rede precisarem acessar os mesmos arquivos
12
e aplicativos acessíveis pela rede, configure o computador como servidor de
arquivos.” (Microsoft, 2012)
Assim sendo, o servidor de arquivo tem um papel fundamental nas
empresas, centralizando o compartilhamento de arquivos e sendo uma tentativa de
evitar que esses arquivos seja compartilhado com todos a todo momento, assim
como evitar que o mesmo arquivo tenha cópias de diferentes versões.
Com a evolução das redes de dados, dispositivos de armazenamento e
serviços providos na internet, os servidores de arquivos passaram a ser uma
ferramenta que não precisa mais ficar alocado dentro da empresa e sim como um
serviços na internet. A disponibilização do servidor de arquivos como serviço
permitiu que a sua utilização deixa-se de ser apenas pelo meio coorporativo e
passou a estar disponível também para o uso particular. Existem alguns exemplos
de servidores de arquivos disponível como serviço e utilizado de forma particular
hoje em dia, como o google drive da google, Skydrive da microsoft, Dropbox da
Dropbox inc. entre outros. Mas não é possível saber se esse servidor de arquivos
armazena os documentos em file system ou em banco de dados.
Existem também servidores de arquivos para compartilhamento de arquivos
de forma pública, onde o usuário disponibilizam arquivos que podem ser baixados
por qualquer usuário com conexão de internet e um browser. Essa forma de
compartilhamento de arquivo gerou alguns problemas depois de um tempo por uma
grande quantidade de usuários disponibilizarem arquivos com conteúdo protegido
por direito autoral. alguns desses serviços públicos de servidor de arquivos
chegaram a ser fechados judicialmente como por exemplo o mega upload. já outros
mudaram sua política de publicação de conteúdo como por exemplo os serviços do
4shared, RapidShare, MediaFire etc.
13
Mas o objetivo do artigo não é falar sobre a parte legal do compartilhamento
de arquivos e sim a forma com que esses dados podem ser armazenados.
2.3. Servidores de banco de dados
Os servidores de banco de dados, tem como finalidade ser o ponto central
de armazenamento de informações em um sistema de tabelas, sendo ela relacional
ou não. segundo Júlio Battisti: “Sistema inovador surgido nos anos 90 e muito
utilizado
no
meio
corporativo,
baseado
em
três
componentes
principais:
gerenciamento de banco de dados, que funcionam como servidores; redes, que
funcionam como meio de transporte de dados e, finalmente, softwares para acesso
aos dados: Clientes”. (BATTISTI, 2001, pg 39).
Esse software para acesso apontado por Battisti, pode ser desde um simples
browser de internet fazendo uma requisição de informações para o servidor de
banco de dados. até uma aplicação específica criada para acessos mais específicos
de dados.
Um diferencial do servidor de banco de dados é que além de fornecer um
ponto central para o armazenamento de arquivos, é possível também armazenar
dados de outros tipo de informações pertencente a uns sistema implementado para
o cliente. Um outro ponto forte dos servidores de banco de dados seria que a
próprias ferramenta fornece mecanismos realização de backups, recuperação por
meio de um arquivo único de todas as informações assim como funções
desenvolvidas para que o banco realize esses backup’s de forma automatizada.
2.4. Servidores web
Como o presente trabalho tem como objetivo demostrar a gravação de
arquivos nos servidores de arquivos e de banco de dados por meio de um ambiente
web, não poderíamos deixar de falar do servidor web. O servidor web tem como
finalidade fornecer os serviços uma aplicação web, interagindo assim com os outros
14
servidores(arquivos e banco de dados) em um ambienta acessado por um navegar.
segundo o site da microsoft “Servidores web são computadores com software
específico que permitem a aceitação de solicitações de computadores de clientes e
retornam respostas à essas solicitações. Os servidores web permitem que você
compartilhe informações pela Internet ou por uma intranet ou extranet.”.(Microsoft,
servidor web, 2012)
No site da microsoft, ainda é apontado algumas finalidades de uso dos
servidores. Que no caso do site expõem algo mais voltado para o servidor
desenvolvido pela própria empresa, chamado de IIS(Internet Information Services).
Na tabela 1 segue os exemplos das aplicações em servidores web IIS 7
Tabela - Aplicações dos servidores web
Fornecer informações para usuários pela Internet.
Permitir que usuários façam download e upload de conteúdos com
FTP ou WebDAV (criação e versão distribuídas na Web).
Hospedar serviços da Web que contém lógica empresarial para
aplicativos de três camadas.
Distribuir aplicativos para usuários pela Internet ao invés de disquetes
ou CDs.
Os servidores Web podem ser úteis para clientes e necessidades
diferentes. Por exemplo:
Proprietários de pequenas empresas podem fornecer informações
sobre seus serviços usando um simples site.
Proprietários de empresas médias podem oferecer seus produtos e
serviços por meio de um sistema de pedidos online composto por vários
aplicativos em um site.
Empresas de negócios podem desenvolver e fornecer aplicativos de
negócios a funcionários por meio de intranets corporativas.
Empresas de hospedagem podem fornecer, a clientes individuais,
espaço e serviços de hospedagem de diferentes conteúdos online e
aplicativos.
Empresas podem fornecer aplicativos de negócios e informações
pertinentes para parceiros de negócios por meio de extranets.
Fonte: Microsoft
15
Mas assim como a escolha de qualquer tipo de servidor, o dimensionamento
dos recursos do servidor web passa por uma análise das necessidades da aplicação
desenvolvida e da quantidade de recurso que sua aplicação irá necessitar.
2.5. Sobre arquivos
Os arquivos de computadores são, um conjunto de bytes estruturado
armazenados em algum meio que pode ser recuperado depois.
Essas estruturas são armazenadas e contém uma extensão responsável por
indicar qual o programa responsável pela leitura, processamento e abertura desse
arquivo, assim, recuperando a informação contidas nele.
Existe
também
arquivos
denominados
executáveis,
esses
arquivos
conseguem a partir da sua própria estrutura serem abertos e lidos para executar
ações pré definidas.
2.6. Sobre banco de dados
Atualmente existe um grande número de banco de dados que podem ser
instalado e utilizados em servidores, a definição de qual o banco de dados será
utilizado em sua aplicação, varia muito do que será desenvolvido e o que esse
aplicativo irá necessitar armazenar de dados. É comum que a escolha do sistema de
banco de dados passe por uma avaliação criteriosa que vai desde a quantidade
prevista de acessos simultâneos, tipo de dados que serão armazenados, até quais
as licenças que esse sistema de banco de dados segue para a sua utilização.
Os banco de dados, tem como princípio básico seguir alguns atributos, como
tabelas, registros, colunas e chaves.
Uma tabela é uma simples estrutura de linhas e colunas. Em uma tabela,
cada linha contém um mesmo conjunto de colunas. Em um banco de dados podem
existir uma ou centenas de tabelas, sendo que o limite pode ser imposto tanto pela
16
ferramenta de software utilizada, quanto pelos recursos de hardware disponíveis no
equipamento.
As colunas de uma tabela são também chamadas de atributos. Ex.: O
campo Nome, ou endereço de uma tabela de um banco de dados relacional.
Os registros são linhas formadas por pelas colunas, mas não
necessariamente todas as colunas precisam estar completas, apenas as que estão
estabelecidas como não nulas(Not null).
As tabelas relacionam-se umas as outras através de chaves. Uma chave é
um conjunto de um ou mais atributos que determinam a unicidade de cada registro.
Existem diferentes tipos de bancos de dados, sendo diferenciados sempre
pela sua estrutura de armazenamento e recuperação de informações. Os banco de
dados são divididos em duas classes, os relacionais e os não relacionais, que
também são conhecidos como NoSql.
2.6.1.
Relacionais
Os banco de dados relacionais, são bancos de dados mais utilizados em
aplicações por seguirem as 13 regras do modelo relacional, essas regras foram
criadas e publicadas por Edgar Frank Codd em 1985, para que o banco de dados
seja considerado relacional, ele deve seguir as seguintes regras apresentadas na
tabela 2.
Tabela - As 12 regras de Codd
Regra
Regra 1
Descricação
Todas as informações em um banco de dados relacional são
representadas de forma explícita no nível lógico e exatamente em
Regra 2
17
apenas uma forma - por valores em tabelas.
Cada um e qualquer valor atômico (datum) em um banco de
dados relacionam possui a garantia de ser logicamente acessado
pela combinação do nome da tabela, do valor da chave primária e
Regra 3
do nome da coluna.
Valores nulos devem ser suportados de forma sistemática e
independente do tipo de dado para representar informações
Regra 4
inexistentes e informações inaplicáveis.
A descrição do banco de dados é representada no nível lógico da
mesma forma que os dados ordinários, permitindo que usuários
autorizados utilizem a mesma linguagem relacional aplicada aos
Regra 5
dados regulares.
Um sistema relacional pode suportar várias linguagens e várias
formas
de
recuperação
de
informações. Entretanto, deve haver pelo menos uma linguagem,
com uma sintaxe bem definida e expressa por conjuntos de
caracteres, que suporte de forma compreensiva todos os
seguintes itens: definição de dados, definição de "views",
manipulação de dados (interativa e embutida em programas),
restrições de integridade, autorizações e limites de transações
Regra 6
(begin, commit e rollback).
Todas as "views" que são teoricamente atualizáveis devem
Regra 7
também ser atualizáveis pelo sistema.
A capacidade de manipular um conjunto de dados (relação)
através de um simples comando deve-se estender às operações
Regra 8
de inclusão, alteração ou exclusão de dados.
Programas de aplicação permanecem logicamente inalterados
quando ocorrem mudanças no método de acesso ou na forma de
Regra 9
armazenamento físico.
Mudanças nas relações e nas views provocam pouco ou nenhum
impacto nas aplicações.
18
Regra 10
As aplicações não são afetadas quando ocorrem mudanças nas
Regra 11
regras de restrições de integridade.
As aplicações não são logicamente afetadas quando ocorrem
Regra 12
mudanças geográficas dos dados.
Se um sistema possui uma linguagem de baixo nível, essa
linguagem não pode ser usada para subverter as regras de
integridades e restrições definidas no nível mais alto.
Fonte: Serpro
2.6.2.
Não relacionais
Bancos não relacionais ou conhecido como NoSql, são bancos criados para
atender a necessidades de aplicações onde os bancos de dados relacionais são
ineficazes. O termo foi utilizado pela primeira vez em 1998 por seu criado, Carlo
Strozzi, onde ele dizia que o NoSql “é complemente distindo do modelo relacional e,
portanto, deveria ser mais apropriado chamado de “NoREL” ou algo que produzisse
o mesmo efeito”. (NoSql, 2012)
As principais características dos bancos de dados não relacionais são a sua
alta performance, replicação, escalabilidade, suporte a dados estruturados e sub
colunas
Os bancos de dados não relacionais, ou também conhecidos como NoSQL,
são bancos que não seguem os princípios das leis de Edgar Frank Codd, assim
sendo, ele armazena os dados de diferentes formar, normalmente esses dados são
armazenados com arrays associativos ou pares de chave e valor.
Os bancos NoSQL são normalmente utilizados para finalidades específicas,
conforme a tabela 3 demostra:
Tabela - Projetos NoSql
Tipo
Documento
Projeto
RavenDB, CouchDB, MongoDB,
MarkLogic, Server, BaseX, eXist
19
Orientado a Objetos
Db4o
Chave/Valor (Key/Value)
Memcachedb, Project
Voldemort, Redis, SimpleDB, Hbase
Tabular
Cassandra e Hypertable
Grafos
DEX e Neo4j
Fonte:NoSql
2.7. Sobre gravação de arquivos
A gravação de arquivos pode ser feita em vários meios, pois os blocos de
bytes, podem ser divididos e armazenados em diversos tipos dispositivos e de
diversas formas diferentes, seja ela diretamente no dispositivo de armazenamento,
banco de dados, além disso o arquivo pode ser compactado, criptografado, divididos
em blocos etc, antes de sua gravação.
2.7.1.
Gravação em file system
A gravação em file system, ou também conhecida como sistema de arquivos
é realizada em pequenos blocos pré-definidos no sistema operacional, esse blocos
são conjunto de bytes que o sistema operacional padroniza para gravar e recuperar
os arquivos direto de disco rígidos, SSD(Solid state disk), fita magnética,
CD(Compact disk) ou qualquer outro meio de gravação.
2.7.2.
Gravação em banco de dados
Para a gravação de arquivos em banco de dados, existem tipos específicos
de campos para registro e técnicas diferentes técnicas de inserção dos dados. Para
entender a gravação desses arquivos no banco, é necessário entender os tipo de
arquivo que será gravado e como essas informações são armazenadas.
Nos bancos de dados relacionais, cada banco tem o seu tipo específico de
registro de como armazenas esses arquivos. No caso dos bancos escolhidos para o
prensente trabalho, Foram escolhidos bancos de dados de diferentes tipo de
20
licenças, Sendo escolhido no modelo relacional o Postgres, MySql e oracle, já no
modelo NoSql foi escolhido o MongoDB.
Na tabela 4 é possível visualizar os tipos de dados e o tamaho máximo que
é possível armazenar nesses registros
Tabela - Tipos de dados
Nome
Oracle 11g
MySql
PostgreSQL
Tipo para
gravação de dados
BLOB, CLOB,
NCLOB, BFILE
TINYBLOB,
TINYTEXT
BLOB, TEXT
MEDIUMBLOB,
MEDIUMTEXT
LONGBLOB,
LONGTEXT
BYTEA(HEX,ES
CAPE)
Máximo por
registro
128 terabytes
256 bytes
64 Kilobytes
16 Megabytes
4 Gigabytes
1 Gigabytes
Fonte: Desenvolvida pelo autor.
2.7.2.1. Oracle
O Banco de dados oracle 11g possuí o diferentes tipos de dados para
armazenamento de arquivos, esses tipos de dados são chamado de LOB(Large
object) e são divididos em sub-tipo que são os BLOB(Binary large object),
CLOB(Caracter larg object), NCLOB e BFILE. segundo a documentação da oracle
subro os tipos LOB “permitem armazenar e manipular grandes blocos de dados não
estruturados (como texto, imagens, gráficos, vídeos, som e formas de onda) em
formato binário ou caracteres.” (Oracle, 2013, tradução nossa)
Ainda na documentação, a oracle descreve como os tipos LOBs trabalham
que é: “eles fornecem acesso aleatório, eficiente a pedaços inteligentes dos
dados.”(Oracle, 2013, tradução nossa)
Os dados do tipo LOB diferem em dois tipos, os RAW e LONG RAW. Mas
ele explica que ambos os tipos não são interpretados pelo banco de dados: “Os tipos
21
de dados RAW e LONG RAW são usados para dados que não deve ser interpretado
(não convertido ao mover dados entre diferentes sistemas) pelo banco de dados
Oracle. Esses tipos de dados são destinados para dados binários ou cadeias de
bytes.”(Oracle, 2013, tradução nossa). O que indica que por exemplo uma imagem
armazenada em banco, é convertida para dados binários ou cadeiras de bytes. Caso
uma consulta seja realizada por uma query no banco irá não irá mostrar a imagem,
mas sim os dados binários ou a cadeia de bytes. Para que a imagem seja exibida,
será necessário que um programa consulte o banco e converta os dados binário ou
a cadeia de bytes na imagem.
Na documentação do oracle 11g ainda explica que LONG RAW pode ser
usado para armazenar gráficos, som, documentos, ou matrizes de dados binários. A
interpretação depende do uso. RAW é um tipo de dados de comprimento variável
como o tipo de dados de caractere VARCHAR2,
A documentação indica que “LONG RAW dados não podem ser indexados,
mas RAW dados podem ser indexados.” (Oracle, 2013, tradução nossa)
A tabela 5 mostra outras características dos tipos de dados RAW e LONG
RAW indicadas na documentação do banco dados oracle 11g.
Tabela - Caracteristicas de RAW e LONG RAW
Uma tabela pode conter colunas LOB, mas apenas uma coluna
LONG.
Uma tabela contendo uma ou mais colunas LOB pode ser dividida,
mas uma tabela contendo uma coluna LONG não pode ser particionado.
O tamanho máximo de um LOB é de 128 terabytes, dependendo do
tamanho do bloco de dados, e o tamanho máximo de um LONG é de apenas
2 gigabytes.
LOBs apoiar o acesso aleatório a dados, mas LONG s suportam
22
apenas acesso seqüencial.
Tipos de dados LOB (exceto NCLOB ) pode ser atributos de um tipo
de objeto definido pelo usuário, mas tipos de dados LONG não pode.
LOBs temporários que atuam como variáveis locais podem ser
usados para realizar transformações em dados LOB. LOBs temporários
internos ( BLOBs, CLOBs e NCLOB s) são criados em um espaço de tabela
temporária e são independentes de tabelas. Para tipos de dados LONG, no
entanto, não há disponibilidade de estruturas temporárias.
Tabelas com colunas LOB pode ser replicadas, mas tabelas com
colunas LONG não pode
Fonte: Oracle
Depois de entendermos sobre o funcionamento dos dados RAW e LONG
RAW, podemos prosseguir com o entendimento dos tipo de dados que pertencem ao
LOB, que são os BLOB, CLOB, NCLOB e BFILE.
Na documentação do oracle 11g, afirma sobre o BLOB que: “O tipo de dado
BLOB armazena dados binários não estruturados no banco de dados. BLOBs pode
armazenar até 128 terabytes de dados binários.” (Oracle, 2013, tradução nossa)
Os tipo CLOB e NCLOB são diferenciados do BLOB por armazenarem os
dados em forma de caracteres: “Os tipos de dados CLOB e NCLOB armazenar até
128 terabytes de dados de caracteres do banco de dados.”(Oracle, 2013, Tradução
nossa).
Ainda sobre CLOB e NCLOB, a documentação fala mais especificamente
sobre o CLOB: “O tipo de dados CLOB armazena dados de caracteres de byte único
e multibyte. Ambos os conjuntos de caracteres de largura fixa e variável são
suportados, e ambos utilizam o conjunto de caracteres do banco de dados.
23
E sobre NCLOB: “O tipo de dados NCLOB armazena dados Unicode. Ambos
os conjuntos de caracteres de largura fixa e variável são suportados, e ambos
utilizam o conjunto de caracteres nacionalizados.”(Oracle.2013. Tradução nossa).
Já por fim o tipo BFILE armazena os dados arquivos do sistema operacional,
ou seja, fora do banco de dados: “O tipo de dado BFILE são dados binários não
estruturados de em arquivos do sistema operacional fora do banco de dados. A
coluna ou atributo BFILE armazena um arquivo localizador que aponta para um
arquivo externo que contém os dados. A quantidade de dados BFILE que podem ser
armazenados é limitado pelo sistema operativo.
BFILEs são somente leitura, você não pode modificá-los. Eles suportam
apenas leituras aleatórias (não sequencial), e não participar de transações. O
sistema operacional subjacente deve manter a integridade de arquivos, segurança e
durabilidade para BFILEs. O administrador de banco de dados deve garantir que o
arquivo existe e que os processos de banco de dados Oracle tem permissões de
leitura do arquivo no sistema operacional.”(Oracle, 2013, Tradução nossa)
Na documentação da oracle, as colunas do tipo LOB são sujeitas a algumas
regras, a tabela 6 lista algumas delas.
Tabela - Regras das colunas LOB
Você não pode especificar um LOB como uma coluna de chave
primária.
Clusters não pode conter LOBs, quer como chave ou colunas nãochave.
Você não pode especificar colunas LOB no ORDER BY cláusula de
uma consulta, ou no GROUP BY cláusula de uma consulta ou em uma
função agregada.
24
Você não pode especificar uma coluna LOB em uma SELECT ...
DISTINCT ou SELECT ... UNIQUE declaração ou em uma junção. No
entanto, você pode especificar um atributo LOB de uma coluna de tipo de
objeto em um SELECT ... DISTINCT ou em uma consulta que usa a UNION
ou operador MINUS de conjunto, se o tipo da coluna objeto tem um MAP ou
ORDER função definida sobre ele.
O (primeiro INITIAL extensão) de um segmento de LOB deve conter,
pelo menos, três blocos de dados.
Você não pode especificar uma coluna LOB, como parte de uma
chave de índice. No entanto, você pode especificar uma coluna LOB na
especificação indextype de um índice de domínio. Além disso, o Oracle Text
permite que você defina um índice em uma coluna CLOB.
Em uma operação INSERT ... AS SELECT, você pode ligar até 4000
bytes de dados para colunas LOB e atributos
Se a tabela tem tanto LONG e colunas LOB, você não pode ligar
mais de 4000 bytes de dados tanto para o LONG e colunas LOB na mesma
instrução SQL. No entanto, você pode ligar mais de 4000 bytes de dados
para tanto o LONG ou a coluna LOB.
Restrições de operação
No SQL Loader, Um campo de leitura de um LOB não pode ser
usado como um argumento para uma cláusula. Consulte "Utilitários de banco
de dados para carregar dados em LOBs" .
Sessão migração não é suportada para BFILE em servidor modo
compartilhado (servidor multithreaded). Isto implica que as operações em
aberto BFILE podem persistir para além do final de uma chamada para um
servidor compartilhado. Em sessões de servidor compartilhado, BFILE
operações são obrigados a um servidor compartilhado, que não podem
migrar de um servidor para outro.
Maiúsculas e minúsculas pesquisas sobre colums CLOB muitas
vezes não conseguem. Por exemplo, para fazer uma pesquisa de maiúsculas
e minúsculas em um colum CLOB.
25
A seleção não sem a LOWER função. Texto Oracle faz pesquisas
maiúsculas e minúsculas.
Fonte: Oracle
2.7.2.2. MySql
O banco de dados MySql, é um banco de dados que se tornou popular com
a expansão web e foi difundido principalmente por programadores php. Atualmente o
MySql pretence a Oracle Corporation.
O MySql, assim como os outros bancos de dados, possui um tipo de registro
especifico para arquivos, assim como já citado anteriormente, os tipos de registros
são o BLOB, e o TEXT. Segundo o site do MySql: “Um BLOB é um objeto binário
grande que pode guardar uma quantidade variável de dados. Os quatro tipos de
BLOB são TINYBLOB , BLOB , MEDIUMBLOB , e LONGBLOB. Estes diferem
apenas no comprimento máximo dos valores que eles podem armazenar. Os quatro
tipos TEXT são TINYTEXT , TEXT , MEDIUMTEXT , e LONGTEXT . Estes
correspondem aos quatro tipos BLOB e têm o mesmo tamanho máximo e os
requisitos de armazenamento.”(MySql, 2013, tradução nossa).
Ainda na documentação do MySql, a diferença entre o BLOB e o Text
são:”BLOB são valores tratados como strings binárias (cadeias de bytes). Eles não
têm nenhum conjunto de caracteres, e ordenação e comparação, são baseados nos
valores numéricos dos bytes de valores da coluna. TEXT são valores tratados como
strings não binários (sequências de caracteres). Eles têm um conjunto de
caracteres, e os valores são classificados e comparados com base no agrupamento
do conjunto de caracteres.”(MySql. 2013. Tradução nossa). Segue a tabela 7
demosntra os tamanhos máximos que podem ser armazenados os dados em bytes.
Tabela - Tamanho máximo dos dados no MySql
26
Tipo de dado
Tamanho
L + 1 bytes, where L <
28
TINYBLOB, TINYTEXT
L + 2 bytes, where L <
216
BLOB, TEXT
L + 3 bytes, where L <
MEDIUMBLOB, MEDIUMTEXT 224
L + 4 bytes, where L <
232
LONGBLOB, LONGTEXT
Fonte: MySql
2.7.2.3. PostgreSQL
Segundo o site do PostgreSQL,: “O PostgreSQL é um sistema de gestão de
banco de dados objeto-relacional (ORDBMS) com base no POSTGRES, Versão
4.2 , desenvolvido no Departamento de Informática da Universidade da Califórnia,
em Berkeley. O POSTGRES foi pioneiro muitos conceitos que só se tornaram
disponíveis em alguns sistemas de banco de dados comerciais muito mais tarde.
“(Postgres, 2013. Tradução nossa).
O
padrão SQL define
que
o
tipo
de
cadeia
binária
é
chamada
de BLOB(Binary Large Object). Mas no caso do PostgreSQL o tipo de
armazenamento de dados binários possuem um nome diferente que é o byteae foi
inserido no postgres a partir da versão 9.0. Mesmo com o nome diferente, as
funções e operadores fornecidos para a operação são praticamente os mesmos.
O
tipo
bytea
é
descrito
na
documentação
como:
“O
tipo
de
dado bytea permite o armazenamento de sequências binárias”.(Postgres, 2013,
tradução nossa )
Essas sequências binárias
de bytes são sequencias diferenciadas de
sequência de caracteres por exemplo, onde a sequência de caracteres são
codificados normalmente pela tabela ASCII com os caracteres imprimíveis(códigos
27
entre 32 e126), Assim sendo no tipo bytea são permitido codificações de tipos não
imprimíveis. O bytea também é um tipo que não sofre de problemas de codificação
de localidade como no caso de sequencia de caracteres. Em termos, o bytea serve
para armazenar bytes de dados brutos e as sequencias de caracteres servem para
armazenar textos.
O tipo bytea são diferenciados em dois formatos, o hex e o escape, sendo o
escape o tipo de dado mais tradicional do postgresql. No caso do escape ele segue
a linha de converter as sequências binárias em sequências de caracteres ASCII. Ao
converter os dados para sequencias não representadas pela tabela ASCII, o escape
utiliza caracteres especiais do próprio tipo escape. Essa conversão é iniciada
sempre com um ou duas barras invertidas (a barra invertida é um “escape” literal) e
faz com que cada byte seja convertido para um conjunto de três dígitos. O
mecanismo de caracteres especiais do tipo escape é um pouco pesado, assim
sendo, a utilização da conversão de bytes para o tipo escape deve ser evitada.
No caso do formato hex, cada registro é iniciado com \x e cada byte dos
dados são codificados para dois dígitos hexadecimais, é permitido espaço entre os
pares de valores hexadecimais, mas não é permitido espaço em branco entre o par
do bytes convertido para hexadecimal. O tipo hex é o tipo padrão do postgres e
tende a ser mais rápido que a conversão para o tipo escape, assim sendo, é
preferencialmente usando nas aplicações.
Ao inserir um registro do tipo bytea, é acrescido de 1 a 4 bytes como bytes
de controle e mais a sequencia de bytes convertidos. Assim sendo cabe avaliar o
quanto esses bytes de controle podem influir no tamanho do arquivo inserido em
bando e no desempenho para sua recuperação, principalmente no caso de um
arquivo que foi quebrado em diversos registro.
28
2.7.2.4. MongoDB
O mongodb é um banco de dados open source orientado a documento
desenvolvido para fácil uso de desenvolvimento e escalabilidade.
Para iniciar o entendimento de como funciona um banco de dados orientado
a documentos, na tabela 8 vamos comprar e entender os termos e conceitos entre
um banco de dados objeto relacional e um banco de dados NoSQL.
Tabela - Comparação dos termos e conceitos do Sql e NoSql
Termos e conceitos do SQL
Database
Table
Row
Index
Table joins
Termos e conceitos do MongoDB
Database
Collection
Documento ou documento BSON
Index
Documentos
embarcados
ou
linkados
Primary key(chave primária) uma única Primary key(Chave primária) No
coluna ou uma combinação de colunas
mongoDB, a chave primária é
setada
Agregação(Group by)
automaticamente
no
campo _id
Framework de agregação
Fonte: MongoDB
No caso citado na tabela anterior, o framework de agregação possui uma
tabela indicando um outro comparativo de como funciona em um banco de dados
SQL e o mongoDB. A tabela 9 mostra essa diferença.
Tabela - Comparativo de termos, funções e conceitos Sql e NoSql
Termos, funções e conceitos SQL
WHERE
GROUP BY
HAVING
SELECT
ORDER BY
LIMIT
SUM()
COUNT()
29
Operações
mongoDB
$MATCH
$GROUP
$MATCH
$PROJECT
$SORT
$LIMIT
$SUM
$SUM
de
agregação
do
JOIN
Não
existe
correspondente
um
ao
operador
JOIN
no
mongoDB, de toda forma, o operador
$UNWIND
tem
funcionalidades
semelhantes com as colunas e com
os documentos.
Fonte: MongoDB
No mongoDB a gravação de arquivo é feita atrás vez de um BinData é feita
por um registro do tipo BSON(Binary-encoded serialization), que é um registro
semelhante ao JSON só que para inserção de documentos. O BSON foi projetado
pra ser leve e eficiente, assim como JSON. O BSON suporta a incorporação de
objetos e arryas dentro de outros objetos e matrizes.
No entando para armazenamento de arquivos maiores de 16 megabytes a
documentação do mongodb fala para usar o GridFS como alteranativa, o GridFS tem
por padrão pegar os arquivos que excedam 16 megabytes e dividir em blocos
menores de 256k, nesta divisão ele utiliza duas coleções para realizado
armazenamento dos dados, sendo uma para armazenar os pedrações dos arquivos
e outra para armazenar o metadados. Uma das vantagens em usar o GridFS é que
ao caso o usuário necessite carregar um arquivo particionado, ele vai montando os
pedaços do arquivo conforme necessário, assim sendo, você pode realizar consultas
apenas em partes do arquivo, sem ter que carrega-lo todo.
Na documentação ainda existe uma seção chamada de “Como faço para
otimizar o uso de armazenamento para documentos pequenos? “(Mongodb, 2013) é
explicito que “Cada documento MongoDB contém uma certa quantidade recursos
30
ocupados. Esses recursos normalmente são insignificante, mas torna-se significativo
se todos os documentos inseridos são apenas alguns bytes, como poderia ser o
caso se os documentos em sua coleção só tem um ou dois campos.”(Mongodb,
2013)
Assim sendo, a documentação passa a seguinte sugestões como estratégia
para otimizar a utilização do armazenamento para coleções no mongodb:
Clientes MongoDB caso o usuário não insira um valor no campo _id o
mongobd adiciona automaticamente um campo _id a cada documento inserido, esse
campo _id gerar 12 byte únicos. Para documentos menores isto pode representar
uma quantidade significativa de espaço.
Para otimizar o uso de armazenamento, os usuários podem especificar um
valor para o campo _id explicitamente Ao inserir documentos na coleção. Esta
estratégia permite aplicações para armazenar um valor no campo _id Isso teria
espaço ocupado em outra parte do documento.
Você pode armazenar qualquer valor no campo _id, mas como este valor
serve como uma chave primária para documentos, caso esse valor do campo não
seja único, então ele não pode servir como uma chave primária havendo colisões de
chave primária duplicada, impedindo assim a identificação.
Na documentação ainda tem uma seção chamada de “Quando devo usar
GridFS?” está descrito que “Para documentos em uma coleção MongoDB, você
deve sempre usar GridFS para armazenar arquivos maiores que 16 MB.”(Mongodb,
2013). Em algumas situações, o armazenamento de arquivos grandes pode ser mais
eficiente no banco de dados MongoDB do que em um sistema de arquivos em nível
de sistema, a tabela 10 exibe essas situações.
Tabela - Situações onde o armazenamento de arquivos grandes pode ser mais
eficiente no sitema e arquivos
31
O sistema de arquivos limita o número de arquivos em um diretório, você
pode usar GridFS para armazenar arquivos como quanto necessário.
Quando você quer manter seus arquivos e metadados automaticamente
sincronizadas e implantado através de uma série de sistemas e
instalações. Ao utilizer uma definição de répicas distribuidas o mongodb pode
distribuir arquivos e seus metadados automaticamente para um número
de instâncias mongodb.
Quando você quiser acessar informações de partes de arquivos grandes sem
ter que carregar arquivos inteiros na memória, você pode usar GridFS
acessar seções de arquivos sem ler o arquivo inteiro na memória.
Fonte:MongoDB
Mas assim como existem situações onde ele não recomenda o uso do
GriFS, como por exemplo “Não use GridFS se você precisa atualizar o conteúdo de
todo o arquivo atomicamente.”(Mongosb, 2013) a alternative no caso de ter que
atualizar todo conteúdo é “Como alternativa, você pode armazenar várias versões de
cada arquivo e especificar a versão atual do arquivo de metadados. Você pode
atualizar o campo de metadados indica que "ultimo inserido" em uma atualização
atômica após carregar a nova versão do arquivo e, posteriormente, remover versões
anteriores, se necessário.”(Monogo, 2013)
A documentaçaõ ainda afirma que no caso de documentos menores que 16
megabytes que ”se seus arquivos são todos menores de 16 MB, tamanho limite do
documento BSON, considere armazenar o arquivo manualmente em um único
documento. Para isso poderá utilizar o tipo de dados BinData para armazenar os
dados binários.“(Mongodb, 2013)
3.
Considerações finais
Após a pesquisa, foi possível traçar e observar que cada banco de dados
armazena seus arquivos de forma peculiar, onde diferentes tipos de registro de
32
banco permitem inserir diferentes quantidades de registo, assim sendo, foi possível
criar uma projeção do armazenamento de dados nos bancos que acrescentam bytes
de controle na inserção de arquivos utilizando o tamanho máximo de cada tipo de
armazenamento de dados. A seguir iremos discorrer sobre como cada banco se
comporta.
3.1. MySql
No caso do MySql, a quantidade de dados adicionados aos registros
particionados e armazenados no tamanho máximo permitido no registro, faz com
que a adição dos dados chegue a 0,039% Já que existem quatro tipos de
armazenamento binários e quatro tipos de dados caracteres.
Tabela - Arquivo único
até 1
Megabyte
até 10
Megabytes
até 100
Megabytes
até 1
Gigabyte
até 10
Gigabytes
TINYBLOB(256
bytes)
BLOB(512 Kilobytes)
MEDIUMBLOB(16
Megabytes)
-
-
-
-
-
TA + 3 bytes
TA + 3 bytes
-
-
-
LONGBLOB(4
Gigabytes)
TA + 4 bytes
TA + 4 bytes
TA + 4 bytes
TA + 4 bytes
TA + 12 bytes
Fonte: Desenvolvida pelo autor
Tabela - Quantidade de partes do arquivo
Quantidade de partes do arquivo
até 10
até 100
até 1
Megabytes
Megabytes
Gigabyte
até 1
Megabyte
até 10
Gigabytes
TINYBLOB(255 bytes)
4113
41121
411207
4210753
42107523
BLOB(511 Kilobytes)
MEDIUMBLOB(15,99
Megabytes)
LONGBLOB(3,99
Gigabytes)
17
161
1601
16385
163843
1
1
7
65
641
1
1
1
3
1
Fonte: Desenvolvida pelo autor
Tabela - Quantidade de bytes adicionados aos registros
até 1
Megabyte
33
Quantidade de Bytes adicionados
até 10
até 100
até 1
Megabytes
Megabytes
Gigabyte
até 10
Gigabytes
Bytes
1048576
10485760
104857600
1073741824
10737418240
TINYBLOB(255 bytes)
1
4113
41121
411207
4210753
42107523
BLOB(511 Kilobytes)
2
34
322
3202
32770
327686
MEDIUMBLOB(15,99
Megabytes)
LONGBLOB(3,99
Gigabytes)
3
4
3
3
21
195
1923
4
4
4
4
12
Fonte: Desenvolvida pelo autor
Tabela - Tamanho final dos arquivos
até 1
Megabyte
Tamanho arquivo com bytes adicionados em bytes
até 10
até 100
até 1
Megabytes
Megabytes
Gigabyte
até 10
Gigabytes
Bytes
1048576
10485760
104857600
1073741824
10737418240
TINYBLOB(255 bytes)
1
1052689
10526881
105268807
1077952577
10779525763
BLOB(511 Kilobytes)
MEDIUMBLOB(15,99
Megabytes)
LONGBLOB(3,99
Gigabytes)
2
1048610
10486082
104860802
1073774594
10737745926
3
1048579
10485763
104857621
1073742019
10737420163
1048580
10485764
104857604
1073741828
10737418252
4
Fonte: Desenvolvida pelo autor
Tabela - Tamanho do arquivo com bytes adicionados
até 1
Megabyte
Tamanho arquivo com bytes adicionados
até 10
até 100
até 1
Megabytes
Megabytes
Gigabyte
TINYBLOB(255 bytes)
1048576
1,00
Megabytes
10485760
10,03
Megabytes
104857600
100,39
Megabytes
1073741824
1,00
Gigabaytes
BLOB(511 Kilobytes)
1,00
Megabytes
10,00
Megabytes
100,00
Megabytes
1,00
Gigabytes
MEDIUMBLOB(15,99
Megabytes)
1,00
Megabytes
10,00
Megabytes
100,00
Megabytes
1,00
Gigabytes
LONGBLOB(3,99
Gigabytes)
1,00
Megabytes
10,00
Megabytes
100,00
Megabytes
1,00
Gigabytes
até 10
Gigabytes
10737418240
10,03
Gigabytes
10,00
Gibaytes
10,00
Gibaytes
10,00
Gibaytes
Fonte: Desenvolvida pelo autor
3.1.1.
Postgres
No banco de dados posgtres não fica claro a forma com a quale le insere os
bytes de controle, especificando apenas que que são inseridos de 1 a 4 bytes de
controle. Assim sendo foi possível estabelecer o cenário de melhor e pior caso de
adição de bytes de controle onde mais uma vez os bytes de controle adicionados
chegam a menos de 1% do tamanho final do arquivo, a seguir será exibida uma
tabela com a projeção dos dados para um único arquivo inserido e para um arquivo
inserido em partes.
34
Tabela - Arquivo inteiro
Arquivo inteiro
Bytea melhor caso
Bytea pior caso
até 1 Megabyte
até 10
Megabytes
até 100
Megabytes
até 1 Gigabyte
até 10 Gigabytes
4 Bytes
1 byte
4bytes
1 byte
4bytes
1 byte
4bytes
1 byte
-
Fonte: Desenvolvida pelo autor
Tabela - Arquivo em partes
Arquivo em partes
Bytea melhor caso
Bytea pior caso
até 1 Megabyte
até 10
Megabytes
até 100
Megabytes
até 1 Gigabyte
até 10 Gigabytes
4 bytes
1 byte
4 bytes
1 byte
4 bytes
1 byte
4 bytes
1 byte
40 bytes
10 bytes
Fonte: Desenvolvida pelo autor
3.1.2.
Oracle
No caso do oracle 11g não a indicação de bytes que são adicionados nos
registro, assim como o tipo BLOB, CLOB, NCLOB que possuem um tamanho limite
de 128 terabytes podendo adicionar registros inteiros até o limite do tipo BLOB,
CLOB ou NCLOB.
3.1.3.
Mongodb
No mongodb os arquivos são inseridos por meio da biblioteca BSON no tipo
BinData no caso de arquivos menores de 16 megabytes, em arquivos superiores a
16 megabtyes é recomendável utilizar o GridFS para o armazenamento de dados
acima de 16 megabytes. O GridFS realiza a divisão do arquivo inserido em blocos
de 256 kilobytes, perminto que um documento seja acessado em seções
expecíficas, como por exempo minutos específicos de um vídeo ou mesmo de uma
música sem ter carregado o arquivo como um todo.
35
4. Resultados
Após a leitura da documentação foram elaborados pequenos testes de
gravação em sistema de arquivo e no banco de dados mongodb, esses teste
mostrou que a implementação da inserção de arquivo em base de dados pode ser
feita de forma simples e eficiente, assim como a utilização de banco de dados
NoSql. No caso do mongodb a inicialização do banco foi realizada de forma fácil
pelo console de comando, onde o usuário acessava a pasta bin dentro da pasta do
mongodb e digitando o comando mongod.exe –dbpath <caminho da pasta de
armazenamento>. Logo após inicializar o banco
O Exemplo desta facilidade de inserção de arquivos na base de dados pode
ser observada na figura 2 que mostra o algoritmo de inserção de arquivos no
mongodb utilizando o GridFS.
Figura - Código de inserção no mongodb
36
Antes de realizar a primeira inserção foi observado que a pasta do mongodb
onde era apontada na inicialização estava apenas com arquivos de controle, como
pode ser observado na figura 3.
Figura - Pasta inicial da base mongodb
Nos testes iniciais foram feitos uploads de um arquivo de 69 megabytes para
teste e foi possível observar na pasta do mongo que foram criados arquivos de
armazenamento e controle dos dados, o upload do mesmo arquivo foi feito onze
vezes para observar o comportamento do mongo com o mesmo aquivo e foi
observado que o mongodb alocou muito mais espaço que o conjunto de dados
enviados, como pode ser observado na figura 4.
Figura - Pasta da base mongodb após armazenar 11 arquivos de 69 megabytes
Após subir o mesmo arquivo 11 vezes foi realizada uma busca no banco de
dados mongodb para verificar como esses dados estavam armazenados e o
tamanho ocupado pelo banco de dados mongodb, essa consulta pode ser
observada na figura 5 e 6. Essa consulta foi feita no console do mongodb utilizando
37
o comando db.NomeDaColecao.find(), onde esse comando retorna todos os dados
armazenados na coleção estabelecida, já para observar o tamanho da base de
dados mongodb foi utilizado o comando show dbs.
Figura - Busca na base de dados mongodb
Figura - Tamanho do bado de dados após gravar 11 arquivos de 69 megabytes
Após observado o comportamento do mongodb no armazenamento de
arquivos, foi efetuado o teste de armazenamento de um arquivo de 192 kb, para
observar o tamanho que o arquivo de armazenamento aloca inicial para o sistema.
38
Essa nova coleção alocou um espaço inicial com dois arquivos, sendo um de 64
megabytes e outro de 128 megabytes, mostrando que armazenamento do mongodb
com GridFS aloca um espaço inicial de 192 megabytes. Esse comportamento pode
ser observado na figura 7.
Figura - Pasta da base mongodb após upload de arquivo de 192 kilobytes na
coleção ArquivoAteUmMega
Após as inserções no banco de dados mongodb foram realizados testes de
obtenção
do
arquivo
por
meio
do
GridFS
utilizando
o
comando
fs.findOne(NomeDoArquivo), onde o arquivo foi recuperado e gravado na pasta
temporária do sistema operacional, além de recuperar o arquivo o mongodb inseriu
um número randômico no nome do arquivo recuperado como pode ser obervado na
figura 8.
Figura - Pasta temporária onde foram gravados os arquivos recuperados do
mongodb
39
Os mesmo testes foram realizados gravando os dados em sistema de
arquivos, conforme a figura 9 e 10 mostra, os arquivos que foram feitos uploads
foram gravados em uma pasta especificada no código. Mas diferente do banco de
dados todas as versões que foram enviadas para o servidor foram sobrescritas pela
última versão, restando apenas um arquivo.
Figura - Pasta de gravação em sistema de aquios depois de 11 uploads de do
mesmo aquivo de 69 megabytes
Figura - Pasta de gravação em sistema de arquivos depois de 11 uploads do
mesmo aquivo de 69 megabytes e 1 upload de um arquivo de 192 Kilobytes
40
Conclui-se que no caso de gravações em sistema de arquivo deve ser feito
uma estratégia de gravação de arquivos em pastas diferentes ou com nomes
diferente sujeridos pelo sistema onde está sendo feito o upload, na figura 11 é
possível observar a comparação de como ficou a partas de arquivos gravados em
sistema de arquivos e no banco mongodb.
Figura - Arquivos gravados em sistema de arquivos e arquivos gravados no
mongodb
Além dos testes demostrados acima, foram realizados testes com outros
arquivos, na tabela 18 é possível observar os tempos de subida dos arquivos e
gravação em sistema de arquivos. Já na tabela 19 é possível observar os tempos do
armazenamento dos arquivos em banco de dados
Tabela - Gravação de dados em sistema de arquivos
41
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 8 Milisegundos
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 32 Milisegundos
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 12 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 338 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 255 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 244 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 1715 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 1087 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 1049 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 14770 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 8015 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 7749 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 71142 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 117508 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 149303 Milisegundos
Fonte: Criado pelo autor.
Tabela - Gravação de dados em banco de dados
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 1629 Milisegundos
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 70 Milisegundos
O Arquivo ABNT_2011.pdf com tamanho 174145 bytes demorou 124 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 837 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 1047 Milisegundos
O Arquivo Jmeter_Book.pdf com tamanho 5491754 bytes demorou 813 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 4913 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 4268 Milisegundos
O Arquivo apache-jmeter-2.8.zip com tamanho 26172552 bytes demorou 3931 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 47690 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 92091 Milisegundos
O Arquivo netbeans-7.3-macosx.dmg com tamanho 191977440 bytes demorou 54252 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 637815 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 487902 Milisegundos
O Arquivo dump.sql com tamanho 1075819688 bytes demorou 626128 Milisegundos
Fonte: Criado pelo autor.
5. Conclusão
Ambos os métodos tem suas vantagens e desvantagens, assim sendo foi
elaborado a tabela 20 para indicar as vantagens e desvantagens do método de
gravação em arquivo de sistema e a tabela 21 para o método de gravação em banco
de dados.
Tabela - Vantagens e desvantagens da gravação em sistema de arquivos
Vantagens
Desvantagens
Arquivo gravado é do mesmo tamanho Dificuldade em realizar comparação das
do enviado.
Backup
configurado
operacional
Não necessita
42
instalar
no
um
versões de um arquivo
sistema Sem backup incremental dos aquivos
sistema Problemas em gerencias vários arquivos
gerenciador
em uma única pasta
Ao alterar um arquivo o mesmo deve ser
sobrescrito total em disco
Sistema de arquivo limita a quantidade
de aquivos em uma pasta
Fonte: Criado pelo autor.
Tabela - Vantagens e desvantagens de gravação em banco de dados
Backups
Vantagens
incrementais
feitos
Desvantagens
pelo Implementação
um
pouco
mais
gerenciado do banco
trabalhosa
Armazenar várias versões de um mesmo Adição de bytes de controle ou no
arquivo
arquivo
de
armazenamento,
necessitando de um espaço maior.
Não e necessário recuperar todo arquivo Performance reduzida, pois além de
para visualizar, sendo possível visualizar subir o arquivo, há a necessidade de
somente partes(Ex: streaming de video)
insert no banco de dados
Salvar apenas parte alterada do arquivo,
armazenando
assim
o
histórico
de
alterações
Altamente escalável
Fonte: Criado pelo autor.
Assim o presente trabalho conclui a sua visão de mostrar algumas das vangtagens
e desvantagens de cada médotod de arqmaenamento de arquivo enviado pela web,
sendo a escolha da forma de armazenamento de arquivos ser definida conforme a
necessidade e requisito do sistema implementado, fazendo com que quem irá
implementar avalie as vantagens e desvantagens de cada método, escolhendo quais
atenderá os requisitos e qual desvantagens não afetará todo sistema.
43
6. Referências
UOL notícias, Tecnologia. Ibope: internet no Brasil chega a 70,9 milhões
de pessoas em casa e no trabalho em setembro. Disponível em :
<http://tecnologia.uol.com.br/noticias/redacao/2012/11/01/ibope-internet-no-brasilchega-a-709-milhoes-de-pessoas-em-casa-e-no-trabalho-em-setembro.htm>,
acesso em 27 de fev. de 2013.
Cliente/Servidor. Arquitetura de Aplicações em 2, 3, 4 ou N camadas.
Disponível em: <http://www.diegomacedo.com.br/arquitetura-de-aplicacoes-em-2-34-ou-n-camadas/> , acesso em 14 de mar. 2013.
Exame.com, Tecnologia. Você sabe qual é o tamanho da internet?
Disponível em <http://exame.abril.com.br/tecnologia/noticias/voce-sabe-qual-e-otamanho-da-internet>, acesso 27 de fev. de 2013
BATTISTI, Júlio. SQL Server 2000: Administração e Desenvolvimento –
Curso Completo. 2. ed. Rio de Janeiro: Axcell Books, 2001.
CODD, Edgar F. Is your DBMS really relational? Computer World, 14 de
outubro de 1985.
Microsoft. Função do servidor de arquivos: Configurando um servidor de
arquivos. Disponível em: <http://technet.microsoft.com/ptbr/library/cc780253(v=ws.10).aspx> acesso em: 10 de novembro de 2012.
Microsoft. Visão geral da função de Servidor Web (IIS). Disponível em:
<http://technet.microsoft.com/pt-br/library/cc770634(v=ws.10).aspx >, acesso em 16
de nov. de 2012.
44
Oracle. Oracle® Database Concepts 11g Release 1 (11.1). Disponível em:
<http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm > Acesso em
19 Fev. 2013.
Oracle. Oracle® Database SQL Language Reference 11g Release 1
(11.1).
Disponível
em:
<http://docs.oracle.com/cd/B28359_01/server.111/b28286/sql_elements001.htm>
Acesso em 19 Fev. 2013.
Mongodb. FAQ: MongoDB for Application Developers. Disponível em:
<http://docs.mongodb.org/manual/faq/developers/> Acessado em 11 de fev. 2013.
MySql. The BLOB and TEXT Types. Disponível em:
<http://dev.mysql.com/doc/refman/5.0/en/blob.html> acessado 19 fev. 2013.
Postgres, PostgreSQL 9.2.3 Documentation. Disponível em
http://www.postgresql.org/docs/9.2/interactive/intro-whatis.html, Acessado em 25 de
fev. 2013
Postgres. 8.4. Binary Data Types. Disponível em :
<http://www.postgresql.org/docs/9.2/static/datatype-binary.html#DATATYPE-BINARYTABLE>, acessado 25 de fev. 2013
NoSql, Material para apresentação de seminário – 23/11/2012 NOSQL,
Vila
Velha
2012.
Disponível
em:
<http://123seminarsonly.com/Seminar-
Reports/2013-02/114144890-Material-Seminario-NoSQL.pdf>.
Serpro, A ESCOLHA DE UM BANCO DE DADOS RELACIONAL.
Disponível em <http://www1.serpro.gov.br/publicacoes/tematec/pubtem03.htm>,
Acesso em 14 de mar. 2013
45
Searchnetworking, Downloading, Disponível em :
<http://searchnetworking.techtarget.com/definition/downloading>, Acesso em 17 de
mar. 2013.
46
Download

Visao comparativa de gravacao de arquivos em sistema