2008/10/22 Walter <lobo...@gmail.com>:
--
Abraços
Edgar Ferreira da Silva
-----
Aprenda PHP, cole códigos, saiba das vagas de empregos:
http://www.manjaphp.com.br
2008/10/23 Mário Júnior <junin...@gmail.com>:
--
Sinceramente, uma base de dados sem um bom DBA, fica uma péssima base de dados.
O MySQL é muito mais rápido que o PostgreSQL, principalmente se você
estiver utilizando tabelas MyISAM, porém ele é em questão de recursos,
não tem muito poder pra criar funções ou trabalhar com integridade de
dados.
Eu sugeri clusters anteriormente, mas você tem definitivamente poucos
dados para um cluster ser necessário.
Tabelas MyISAM podem, normalmente, guardar até 2^32 registros (mais de
4 bilhões de linhas), e este valor ainda pode ser aumentado para
2^64,se o MySQL for compilado com suporte a grandes tabelas.
InnoDB, que suporta transações e referências, pode conter muito mais
do que isso (na verdade acho que não tem limites).
http://www.shinguz.ch/MySQL/mysql_limitations.html
Sua melhor opção deve ser mesmo otimizar as consultas e/ou fazer um
upgrade de hardware.
Desculpe criticar, Eduardo, mas você está exibindo um ponto de vista pessoal.
MySQL e PostgreSQL são bases de dados diferentes, e devem ser
utilizadas para fins diferentes. MySQL é pra ser rápido. Postgres tem
mais recursos.
Minha preferência é MySQL, mas eu não utilizaria ele para um projeto
em uma grande organização, preferiria usar um Oracle se fosse o caso.
>> Modifiquei um pouco a tabela e adicionei um campo chamado "scheme"
>> onde vai ficar um registro tipo INTEGER, o numero vai ser para
>> identificar se é http ou https e etc, poupando um pouco o volume de
>> dados (http://)
>> Outro campo para armazenar se tem ou não o www (tipo inteiro também).
>> No total serão poupados uns 8 caracteres.
>>
INT(1) não quer dizer int de 1 bit. O número entre parêntesis determina
apenas a forma de exibição do campo, ou seja, INT(1) e INT(11) ocupam os
mesmos 4 bytes e armazenam valores entre -2147483648 e 2147483647
(signed) ou 0 e 4294967295 (unsigned), no seu caso use tinyint unsigned
(1 byte, 0 a 255).
Boa Tarde.
Estou fazendo um sistema de armazenamento de links e estou passando
por alguns problemas que infelizmente não consegui achar a melhor
solução para isto.
Ele chegou a ter 35 milhões de registros e uma consulta na tabela
estava demorando.
Era apenas uma tabela e agora estou refazendo o sistema e remodelei o
banco da seguinte forma:
Tabela: links
Campos:
id: INT(10)
link: VARCHAR(200)
created: DATE
flag: INT(2)
Possui 2 index: Uma para flag e uma para link.
Tabela: sublinks
Campos:
link_id: INT(10)(FK)
sublink: VARCHAR(1000)
created: DATE
flag: INT(2)
Possui 2 index: Uma para link_id e outra que tem 2 campos (link_id e
flag)
Pensei em fazer desta forma porque ai não preciso colocar o endereço
completo em cada sublink adicionado:
http://www.site.com/algo/teste.php
o http://www.site.com seria gravado na tabela links e o restante na
tabela sublinks relacionando com a tabela links
Uma das complicações é que o sublink não pode ser repetido, ou seja:
vou ter que fazer várias consultas antes de cada inserção no banco
para ver se ele é ou não duplicado. (poderia criar um trigger que
setasse a flag com um numero diferente e depois limpar todos os campos
que tivessem a flag respectiva, porém não sei se muda muito)
Outra foi o fato de o banco estar com mais de 5 gigas e ter
comprometido a integridade do mesmo (perdemos o banco e tivemos que
restaurar um mais antigo)
Cheguei a pensar em colocar em um XML pois ai poderia dividir em
vários arquivos pequenos, porém, meu amigo falou que mesmo assim
ficaria mais lento e inviável de fazer.
O que me recomendam pesquisar para resolver este e possíveis problemas
futuros?
Obrigado.