Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jean Franceschi

Vários Bancos ou poucos?

Recommended Posts

o que até pode aumentar a performance do bd, é ter uma string SQL enxuta, bem estruturada, e usou o bd, ja fecha a conexão, para não consumir recursos do bd

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sobre a questão de saber se o mysql aguentaria vários acessos usando algumas poucas tabelas ou se seria melhor várias pequenas tabelas, creio que a melhor solução será testar tanto uma forma quanto outra, e ver qual será a mais adequada para a sua necessidade.

 

Lembre-se não existem verdades absolutas, existe o que é melhor para o seu caso.

 

Também não gosto do phpmyadmin, mas como existem muitos provedores que só oferecem isso, sei mexer o necessário nele.

 

Em todos os outros que permitem, uso a suite Mysql Gui tools, é um conjunto de aplicativos que você pode baixar no site do mysql, quando estava aprendendo mysql vi esses aplicativos para baixar e gostei muito deles pela facilidade de uso que apresentam.

 

A unica diferença que notei nos comandos sql está no delete, no resto, é bem tranquilo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou começar usando os passos simples pra quem usa acess.

 

Primeiro deixa eu falar da conexão ao banco. Este caso é de extrema importância, pois eu notei uma diferença muito grande apenas trocando o plugin de conexão aos bancos de dados acess. Muita gente usa dessa forma:

"DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Caminho_Banco_de_Dados & "nomedobanco.mdb"

 

Eu usava a té algum tempo atrás, quando descobri que usar este "driver" do acess carrega demais as aplicações e conexões. Inclusive eu vivia com report de erro avisando que um banco X estava "locked by admin" e nãod eixava outra pessoa conectar a ele pra consulta ou update no banco. Depois de muito procurar sobre este erro e como resolver, descobri que o acess quando está aberto com este driver não deixa mais ninguém abrir o banco de dados rpa consulta até o banco que estava aberto ser fechado, e como falei, este driver carrega demais e é muito demorado pra abrir e fechar as conexões, por isso este erro acontecia muito.

 

Então testei a conexão via OLEDB, naquela época não notei muita diferença (tanto que aqui mesmo eu perguntei se a diferença era grande), porém, agora, com muitos usuários eu noto que chega ficar 4 vezes mais rápido uma consulta em um banco de dados grande. Como primeira dica, se for usar acess como banco, tente sempre usar este plugin aqui, pois ele "salva vidas" =P

"Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Caminho_Banco_de_Dados & "nomedobanco.mdb"

 

Notei tbm que depois de usar este plugin o erro que dava parou... acredito que agora sim ficou bem melhor. Teste no seu iis este plugin, veja se o seu servidor tem suporte a ele. Acredito que todos os servidores de hoje já suportem este plugin, ele é leve e não uda nenhum comando pra acessar a base de dados.

 

 

 

Vamos a uma segunda parte.

Desenvolvendo um projeto grande em acess você precisa ter em mente que vai sofrer algumas limitações, é bom se rpeparar pra elas o quanto antes.

Coloque no papel toda a estrutura do seus bancos, o que vai usar de forma comunitária (mais de um usuário vai acessar) e o que vai ser acessado exclusivamente por um usuário. Isso pode ser fundamental quando você tiver um banco muito grande e muitos usuários.

 

Vamos criar "de forma imaginária" um site que seja parecido com o orkut, com menos funções, que seja simples, já q ele tem muitos usuários e os bancos de dados podem acabar se tornando muito grandes.

 

Primeiro precisamos de um banco de dados onde o usuário se cadastre, este banco indiscutivelmente vai ser grande, pois todos cadastros de usuários serão jogados alí, ams tem uma forma simples de "burlar" isso. Vamos criar então 1 banco de dados com apenas 3 campos:

 

ID: Autonumeração (Chave primária)

Usuário: Campo texto (limite em 100 caracteres, se usar e-mail deixe em 100 caracteres, se for usar como "nome de usuário" diminua este campo para 50 caracteres no máximo)

Senha: Campo texto (limitado em 24 caracteres, mais que isso é desnecessário)

 

"Defina o nome da tabela a sua escolha e defina o nome do banco a sua escolha, por motivos óbvios, aconselho usar a tag Geral_Nomedobanco.mdb pra você conseguir se localizar quando tiver na pasta do banco de dados em meio a muito outros."

 

As limitações acima no banco de dados para campos texto devem ser rigorosas já que este banco será acessado por quase "todos os usuários" ao mesmo tempo. se você tiver 5 mil conexões por hora, da pr calcular cerca de 300 delas simultâneas, não no mesmo segundo, mas muito próximo uma conexão da outra e se os dados forem muito extensos, a consulta pode demorar demais e reiniciar o servidor do seu site, derrubando todos os usuários que estão nele (inclusive os logados nas contas já) por alguns instantes e todo mundo terá que fazer login novamente. Entendeu o circulo vicioso? Se todo mundo cai pq a consulta está lenta, quando o server voltar, todo mundo vai conectar de novo e o server cairá de novo, logo vai ficar sem usuários, pois ninguém vai acreditar que o seu site tenha futuro!

 

Agora vamos pro segundo banco de dados, este será de cada usuário, e sinceramente, você pode fazer ele ficar gigante, encher de campos, não importa, pois ele será cessado por pouca gente, e mesmo assim ele só terá 1 registro interno.

 

Dois campos lógicos para ser adicionado:

1. ID (Chave primário) Autonumeração (para garantir que não aja erros nas consultas apesar de só ter um registro nele)

2. ID_Usuario (Numero) Um campo numérico, pois a ID que o usuário se cadastrou la no banco GERAL deve constar aqui pra interligar tudo áquele banco

3. Email (Campo do tipo a sua escolha)

4. MSN (Campo do tipo a sua escolha)

5. ETC, vá colocando os campos que você quiser, mais tarde poderá adicionar mais campos caso tenha necessidade. PS: Tente colocar todos campos necessários agora, pois terá que mudar muitos bancos de dados para adicionar este campo que você adicionará mais tarde (Quanto mais usuários cadastrados, mais banco vão existir).

 

Este banco você pode salvar como "Modelo_NomeDoBanco.mdb" pq ele ficará sempre em branco pra ser copiado "zerado" pra pasta do usuário que se cadastrar.

 

Se você quiser poupar espaço em disco, crie outra tabela dentro deste mesmo banco, com o nome de "Mensagens", que será as mensagens que este usuário irá receber de outras pessoas cadastradas. Se quiser, pode criar outro banco novo, isso é independente,a sua escolha. Se criar um novo Banco, salve ele com o nome de "Modelo_NomeDoBanco.mdb" pra você saber q ele é outro modelo a ser copiado pra pasta do usuário na hora do cadastro dele. Vamos aos campos:

 

1. ID (Chave primário) Autonumeração (para garantir que não aja erros nas consultas apesar de só ter um registro nele)

2. ID_Usuario (Numero) Um campo numérico, pois a ID que o usuário se cadastrou la no banco GERAL deve constar aqui pra interligar tudo áquele banco

3. ID_Remetente (Numero) Aqui vai aparecer a ID do usuário que deixar esta mensagem aqui neste banco (no caso, deixar a mensagem pra este usuário)

4. Mensagem (Pode ser texto ou memo, depende do que você prefere usar (se quiser limitar o campode emnsagem do usuário para uma determinada quantidade de caracteres)

5. Lido (Campo verdadeiro/falso ou Sim/Não) com valor padrão "Desmarcado" ou "0". Aqui vai mostrar pro usuário q ele tem uma mensagem nova, e quando ele ler, o campo será marcado pra Verdadeiro/Sim, indicando que ele já leu esta mensagem.

6. Fique a vontade pra criar novos campos ;)

 

 

Agora temos nosso banco de dados GERAL e nossos dois modelos de bancos de dados. O que vamos fazer é o seguinte:

 

1. O usuário é novo no site e vai se cadastrar. Pra não obigar o usuário a se cadastrar duas vezes, você pode usar o emsmo formulário e depois adicionar os dados nos dois bancos de dados, porém vamos precisar de 3 páginas ao invés das duas como de costume.

 

A idéia é essa:

  1. Uma pagian com os campos pra cadastro;
  2. Uma página para receber os dados do cadastro;
  3. Uma terceira página, onde os dados dos egundo banco vão ser recebidos, enviados direto pela segunda página;

 

Pq usar 3 páginas? Pq na segunda página vamos receber o nome de usuário e senha, ainda não teremos o ID e vamos pecisar dele pra fazer tudo funcionar, inclusive criar uma pasta com o nome dessa ID para colar os bancos de dados "Modelos" dentro dela. pra isso vamos ter a terceira página.

 

Após cadastrar os dados "Usuário e senha" no banco de dados Geral, feche as conexões ao banco e na mesma página (No caso a segunda), Criei duas sessions, uma para usuário e outra para senha, amis ou menos assim:

 

Session("Usuário") = Usuario
Session("Senha") = Senha

'mandamos o usuário sem ele saber pra terceira página junto com os campos de menor importância via GET direto no link:
Response.Redirect("Pagina_03.asp?Email="& Email &"&MSN="& MSN &"&ETC="& ETC)

 

Na terceira página, recuperamos o que foi enviado via GET (Usando Request.Querystring()) e com as sessions, verificamos a ID que foi criada pra este usuário, seria mais ou menos assim, uma consulta simples:

 


Set Conexao_Banco_Geral = Server.CreateObject("ADODB.Connection")
   Conexao_Banco_Geral.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Caminho_Banco_de_Dados & "Geral_Nomedobanco.mdb"

   Dim Mostragem
   Set Mostragem = Conexao_Banco_Geral.Execute("SELECT Id FROM Nomedatabela WHERE USUário='"& Session("Usuário") &"' AND Senha='"& Session("Senha") &"'")
       If Mostragem.EOF Then 'Não chou o login redirecione pra uma página de erro no cadastro - "ESTE ERRO pode ter sido cometido por você não tendo cadastrado o usuário corretamente, reveja seu código asp e o banco de dados
           Response.Redirect("Pagina_De_Erro.asp")
       Else

           'Vamos salvar a ID do usuário em uma sessão tbm, essa ID é o principal ítem que vamos usar sempre que ele tiver logado, por isso, na página de login de usuário, sempre salve em sessão esta ID, vai facilitar muito a sua vida e não vai gerar erros desnecessários ^^
           Session("Id") = Mostragem("Id")


           'Aqui vai o código que vai copiar os bancos de dados na pasta que vamos criar. Vou abordar este assunto mais pra frente

           'Após copiar os bancos de dados pra pasta do usuário, aqui você abrirá a conexao com o banco "dele" pra cadastrar os dados extras que ele gerou no cadastro. Já já falo dessa parte

       End If
       Mostragem.Close
   Set Mostragem = Nothing
   Conexao_Banco_Geral.Close
Set Conexao_Banco_Geral = Nothing

 

 

Agora que temos a ID do usuário, vamos usar o FSO para copiar os banco de dados e criar uma pasta para os bancos deste usuário. outra opção é usar alguns plugins do próprio windows (IIS) para "criar novos bancos de dados", porém, alduns plugins MDAC tem bugs, e se você não tem certeza sobre seu servidor, a melhor opção é você copiar os arquivos diretamente.

 

 

depois continuo, tenho q ir pra facul...

 

OBS: Aqui estou só "explicando o processo pra se fazer isso de forma simples", não estou montando um projeto inteiro para testes, cabe a você leitor a fazer a criação do projeto para seu teste e seu gosto. Assim que eu tiver um tempo, eu mesmo vou criar o projeto todo e disponibilizar pra download, assim, com o projeto todo montado fica mais fácil talvez de entender tudo que eu esteja dizendo aqui, e vice versa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.