P>

capaNET38.JPG

Clique aqui para ler todos os artigos desta edição

Mão na Massa

Desenvolvendo um site como o YouTube

 

O que você acha de publicar vídeos na Web? Essa é uma idéia bem interessante e que vem fazendo muito sucesso, ou você nunca ouviu falar do YouTube? Se nunca viu dê uma olhada em www.youtube.com. O YouTube é um site onde podemos publicar vídeos e assistir qualquer vídeo que lá esteja publicado. Como é um site visitado no mundo inteiro, a quantidade de vídeos é enorme.

Será que é muito difícil fazer um site igual a esse? A reposta é não! Com ASP.NET 2.0 e o SQL Server 2005 (versão 2000 e Express também dá) implementaremos passo a passo um site para a publicação e exibição de vídeos.

Onde armazenar os vídeos do site?

Como estamos falando de uma galeria, onde várias pessoas poderão publicar os seus vídeos e também assisti-los, será necessário armazenar as informações sobre os vídeos (Nome do Vídeo, Descrição, Autor etc.) em um banco de dados.

Isso não é problema, mas a questão que surge a seguir é: “Onde armazenaremos os vídeos que serão publicados?”. Temos duas alternativas possíveis:

·         File System: Podemos gravar os vídeos em uma pasta do servidor Web onde o Web Site estará publicado. Quando o usuário publicar um vídeo ele estará fazendo um upload para essa pasta. E na tabela, armazenaremos as informações do vídeo, criamos um campo que aponta para onde o vídeo está salvo no disco;

·         Banco de dados: Um vídeo, assim como uma imagem ou um documento, é um conjunto de dados binários. Os bancos modernos permitem armazenar dados binários em suas tabelas. No SQL Server 2000 usamos o tipo image e no SQL Server 2005 usamos o varbinary(MAX) para os campos onde armazenamos dados binários.

Mas e aí? Qual das duas formas é a melhor? Geralmente nos meus artigos eu já começo com um exemplo prático, mas antes de começarmos a por a mão na massa, achei importante levantar alguns prós e contras dessas duas formas de armazenamento para então podermos decidir qual das duas utilizar.

Vantagens de armazenar arquivos binários em File System

·         Requer menos trabalho: Através dos meios tradicionais, armazenar e recuperar dados binários em bancos envolve um pouco mais de trabalho do que fazer o mesmo em File System;

·         É mais fácil montar URLs: Para acessarmos dados binários de um banco, precisamos criar uma outra página para recuperar os dados. Para essa página passamos o ID do registro onde está o arquivo, e então o arquivo é recuperado do banco. Teríamos uma URL parecida com essa:

 

http://localhost/WebVideos/ShowVideo.aspx?ID=1515.

 

Agora se estivermos armazenando os arquivos em File System, teremos uma URL bem mais simples:

 http://localhost/WebVideos/ImageFolder/XVdePiracicaba.avi.

 

·         Performance: Uma vez que os dados estão sendo armazenados no File System do servidor Web, em vez de estarem armazenados no banco, a aplicação está acessando menos dados, reduzindo a demanda e evitando o congestionamento de rede entre o Web Server e o banco de dados.

Vantagens de armazenar arquivos binários no Database

·         Melhor gerenciamento dos dados: Uma vez que os dados binários estão armazenados no banco, juntamente com seus metadados (Nome do arquivo, Autor, Descrição etc.), fica muito mais fácil o gerenciamento desses, principalmente em tarefas como: backup, transferência do banco de um servidor para outro, replicação etc.;

·         Reforça o conceito de Integridade Referencial: Quando armazenamos um arquivo binário em File System e criamos um campo na tabela que aponta para o caminho onde esse arquivo está, não temos nenhuma integridade referencial entre o arquivo e o registro da tabela (qualquer usuário com direitos pode apagar o arquivo, sem que haja uma verificação na tabela). Ao armazenarmos o arquivo no banco, temos essa integridade garantida;

·         Maior segurança: Ao armazenar dados binários no banco, não precisamos dar direitos de gravação para o Web User Account na pasta onde os arquivos seriam salvos em File System;

·         Maior integração com os processos de negócio (workflows): Uma vez que um arquivo binário pode ser tratado como um registro de uma tabela, podemos integrar esse arquivo em qualquer processo de negócio da empresa, como por exemplo, podemos criar um sistema que solicita a aprovação de documentos antes de publicá-lo na Web;

·         Versionamento: Ao armazenarmos arquivos binários no banco, podemos criar sistemas de versionamento, onde ao subirmos uma nova versão do documento, a versão antiga é preservada em um registro diferente.  Softwares como o SharePoint realizam versionamento dos arquivos pois armazena os mesmos no banco.

A nossa opção é...

Veja que são várias as vantagens e desvantagens de cada uma das opções. É necessário avaliar o cenário antes de se tomar essa decisão. No nosso caso, vamos optar por armazenar os vídeos no banco, pois o site será aberto a qualquer pessoa e não podemos liberar o acesso a esses usuários em uma pasta do Web Server.

Também estamos tomando essa decisão para que possamos demonstrar como é simples trabalhar com dados binários no banco quando estamos usando o ASP.NET 2.0 e SQL Server 2005. De qualquer forma se você não quiser optar por armazenar dados binários no banco, com algumas modificações poderá implementar os exemplos do artigo gravando os arquivos em File System.

Criando o banco

Chega de conversa e vamos logo à prática. Neste exemplo utilizaremos o SQL Server 2005, mas você pode utilizar o SQL Server 2000 ou a versão Express se desejar. Abra o seu SQL Server e crie um novo banco chamado “WebVideos”. Inclua uma nova tabela chamada “Videos”, que deve ter a mesma estrutura demonstrada na Figura 1.

 

image004.jpg

Figura 1. Estrutura da tabela Videos

Veja que temos um campo chamado VideoData do tipo varbinary(MAX). É nesse campo que armazenaremos os dados binários referentes ao vídeo que o usuário publicará. Também temos um campo chamado MIMEType, que armazenará o tipo do vídeo que foi publicado.

Como sabemos, existem vários formatos de vídeos no mercado, veremos como tratar isso adiante. Quanto ao campo VideoId, ele foi criado como identity(1,1). Você pode conferir o script completo de criação da tabela na Listagem 1.

 

Listagem 1. Script para a criação da tabela Videos

USE [WebVideos]

GO

/****** Object:  Table [dbo].[Videos]   

******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Videos](

  [VideoId] [int] IDENTITY(1,1) NOT NULL,

  [Title] [varchar](50)

    COLLATE Latin1_General_CI_AS NOT NULL,

  [FileName] [varchar](256)

    COLLATE Latin1_General_CI_AS NOT NULL,

  [Description] [varchar](500)

    COLLATE Latin1_General_CI_AS NOT NULL,

  [Author] [varchar](50)

    COLLATE Latin1_General_CI_AS NOT NULL,

  [MIMEType] [varchar](50)

    COLLATE Latin1_General_CI_AS NOT NULL,

...

Quer ler esse conteúdo completo? Tenha acesso completo