Banco de dados, separados por database?

13 respostas
B

Ola, quero tirar uma duvida sobre performance no meu programa q estou fazendo para aprender sobre banco de dados.

Seguinte, seguindo o exemplo mais basicos de todos, tenho Aluno, Curso, Livro e Escola.
Aluno se ralaciona com curso e com escola, curso com escola e livro tbm com escola.

Se por acaso no meu banco tivessem 100 escolas, seria mais compensativo criar um database pra cada escola? Assim ficaria mais organizado n ficaria?

Exemplo de uma query, de uma escola1 e uma escola2:

Select * From escola1.aluno;
Select * from escola2.aluno;

Assim nao seria muito mais rapido, por um database possuir menos dados e a pesquisa seria mais rapida?
Se fosse tudo no mesmo database:

Select * From aluno Where escola = 1
Select * From aluno Where escola = 2

Alguem com mais experiencia em banco de dados: posso fazer isso?
Vlw :smiley:

13 Respostas

L

Um database para cada escola é pedir para “desorganizar” a base de dados. Veja: como você resolveria o problema de criar uma query com todas as escolas? E existe o fato de que o aumento de performance pode não acontecer.

É melhor usar uma entidade de escola apenas. Se você quiser restringir uma escola de acessar dados de outras escolas pode criar vários usuários e dar-lhes “grants” (privilégios) específicos. E se precisar performance, a base de dados lhe dará algumas ferramentas para você que não é desfragmentar tabelas manualmente.

E lembre-se, performance em banco de dados é uma ciência mística, não uma ciência exata, e que deve ser feito a posteriori, quando as principais queries utilizadas já estão definidas.

italo.vendrameto

Concordo com colega,

Modele o seu banco sem se preocupar com isso, garante que a modelagem está bem feita (atende as 3 formas normais), que sua aplicação acessa esse modelo de forma correta.

Quanto ao desempenho do banco, isso tem que ser controlado por fora de forma que isso fique transparente para sua aplicação, por exemplo no oracle vc pode dividir um mesmo modelo em vários usuáros (database) e mesmo assim o acesso entre eles fica transparente.

Outra coisa a se pensar é cuidado com uso de indices em tabelas grandes, se feito de forma errada seu banco fica lento.

Resumindo, mantenha seu modelo como unico, em um database, e planeje bem o uso do mesmo que vc não deve ter grandes problemas

B

Vlw pessoal!

Ja ouvi falar destes indices, oq sao eles?

italo.vendrameto

Respondo a sua pergunta, primeiramente com outra.
Qual a sua formação acadêmica ou profissional?
se apenas acadêmica, você já cursou alguma cadeira relacionada a banco de dados?
se apenas profissional, com que tipo de banco de dados você já trabalhou?

Fora isso vamos a resposta:

Quando vc pega um livro e quer localizar alguma coisa nele vc primeiramente vai ao indice e procura por uma referencia ao assunto procurado para saber exatamente em que página vc pode encontrar a informação procurada.

em banco de dados indice representa a mesma coisa, é uma referencia, de rápida localização para vc localizar as informações mais rapidamente, pq todo mundo manda tomar cuidado com uso de indices?
bem imagina só que a cada insert, update e delete vc tenha que manipular um indice de 10 milhoes de registros, vamos piorar um pouco agora pensa nessa tabela com não uma mas 20 indices.
dessa forma vc passaria mais tempo atualizando indices do qualquer outra coisa

B

E uma formacao academica :slight_smile:
Nunca tive experiencia com banco de dados, so uma pequena apresentacao, dai peguei pra aprender.
Estou usando o mysql.

Esses indices sao criados como?
Vlw!

italo.vendrameto

Bom antes de mais nada seria muito bom vc dar uma lida em algum livro

Esse livro é bom na uma olhada nos primeiuros capitulos dele, a tradução não é das melhores e ele já é antigo mas vc deve achar fácil na biblioteca de qualquer curso de TI, e acho que vale apena ler.

Sistema de Banco de Dados
ABRAHAM SILBERSCHATZ HENRY F. KORTH S. SUDARSHA

PS: não vale apena comprar ele livro, mas para uma leitura rápida é legal

D

Brunoja, normalmente você trabalharia com vários database’s em situações como essa, separados por negócio dessa forma:

Exemplo um sistema de recursos humanos:

db000: Tabelas de Unidades, centros de custos
db001: Tabelas com Informações fixas, calculos de impostos.
db002: Tabelas de Funcionários
db003: Tabelas de Pagamentos.

E assim por diante.

Uma tabela pode estar em vários table-spaces(Oracle) simultaenamente para gerar uma melhor performance, mas mesmo assim ela ficará em um único database.

Ter vários databases, tornaria uma geração de relatório algo impraticavel dependendo do negócio.

Abraço

B

Eh isso mesmo, com um database, varias “sub-pastas”.
Cada “sub-pasta” vai ser uma escola, dentro as suas informacoes, curso, aluno, etc…

Eh viavel isso?

D

Isso seria viavel se cada table-space ou datafile estive em um disco separado, no mesmo disco seu ganho seria nulo ou minimo.

Vale a pena em sistemas realmente distribuidos.

B

Eh pq assim, imagine todos os alunos de todas as escolas numa unica tabela, se cada escola tivesse sua tabela de alunos, (cada uma com sua pasta), a pesquisa n seria muito mais rapida?

Ex:

Select * From escola1.aluno ----> Com pastas, cada escola com sua tabela
Select * From aluno Where escola = 1 ----> Sem pastas, tudo na msm tabela

D

Bruno,

Table-space não é tabela eh um arquivo que pode contar várias tabelas, seria algo mais próximo do disco que uma tabela.

Uma tabela por escola, seria trabalhoso demais pro seu sistema você teria que ficar criando uma tabela a cada nova escola.

Como você montaria um relatório com tantas tabelas assim?

Você não perderia em performance com uma única tabela pois você pode criar alguns indices pra resolver o seu problema de performance.

maquiavelbona

brunoja:
Eh pq assim, imagine todos os alunos de todas as escolas numa unica tabela, se cada escola tivesse sua tabela de alunos, (cada uma com sua pasta), a pesquisa n seria muito mais rapida?

Ex:

Select * From escola1.aluno ----> Com pastas, cada escola com sua tabela
Select * From aluno Where escola = 1 ----> Sem pastas, tudo na msm tabela


Maior performance é relativo. É notório que uma restrição (where) gera maior impacto na consulta mas isso não é perceptível a não ser que faça uniões (joins) com índices mal feitos. Mas o pior disso é que você quer matar um problema com um pior: acabar com sua modelagem de dados. Tem sentido ter bases separadas com informações que podem ser compartilhadas? O problema que o colega disse, e se eu quiser a lista de todas as escolas, como farás? Se quiser ver se há um mesmo aluno em duas ou mais escolas, o que farás? Procurará em cada base para depois ver se ele está mesmo? Será que não vai ser menos impactante você fazer uma busca por quantos registros de um tal aluno existe na base unificada? E se um livro de um curso for mudado, vai mudar em cada base?

Fazer errado não é justificativa para tentar melhor perfomance. Estudar um pouco de como funciona a árvore de dados do seu SGDB é uma boa para começar a pensar no que tem que mudar. Caso precise de performance extrema, procure na própria documentação que há muitas dicas de como melhorar.

Só falta você falar que tem falta de performance usando MyISAM. Acho que nem com InnoDB terias essa desculpa.

Até!

B

Vou pesquisar sobre indices.

Vlw!

Criado 28 de janeiro de 2008
Ultima resposta 28 de jan. de 2008
Respostas 13
Participantes 5