Banco que suporte grande volume de dados

52 respostas
marcosbrandao

Fala galera…

Fui requisitado para fazer um sistema com volume de dados muito grande.
O cliente sugeriu que fosse utilizado um banco free, e esse eh um assunto que não conheço muito bem, pois sempre trabalhei com oracle(pago) e sql server.

Pelo que pesquisei no fórum, os mais indicados são MySql e Postrgres.
A minha duvida é se eles suportam uma grande volume de dados(mais de 500.000), sem gerar problemas.

52 Respostas

T

500.000 registros qualquer um desses bancos faz com um pé nas costas, se você usar um sistema operacional decente para eles (Linux ou Solaris).

marcosbrandao

Infelizmente, estamos falando de windows.
Cliente é quem manda…

L

POSTGRE É O CARA!

T

Nesse caso seria o MySQL, já que o PostgreSQL (até algumas versões atrás) não funcionava muito bem com o Windows. Não sei como está o PostgreSQL agora.

Pedrosa

Um colega meu que fez um curso de tunning de Postgres disse que no Windows ele tem 35% de performance contra 100% no Linux.

L

utilizo o postgre no windows e ainda nao tive problemas

T

Vou explicar por que é que o PostgreSQL era (ou é) lento no Windows.
É que, para evitar ter de reescrever muita coisa, optou-se por usar uma biblioteca que emula as bibliotecas do Unix no Windows.
Mas isso quer dizer que para cada “fork” do Unix é necessário criar um processo novo no Windows, quando por motivos de desempenho seria necessário criar apenas uma nova thread.
O problema nesse caso é que a comunicação inter-processos no Windows é muito lenta, diferentemente do caso do Unix onde o mapeamento de memória compartilhada entre processos é imediato.
Esse problema foi consertado em uma versão não-free do PostgreSQL que era fornecida por um brasileiro.
Vou dar uma olhada se consertaram esse problema nessa versão do PostgreSQL (8.2).

marcosbrandao

Bom, agora sei que os dois suportam uma grande volume, que era minha duvida inicial.

Agora me parece que o problema eh performance.
Como o volume acesso a base pode ser relativamente grande. Vou ter que optar pelo mais performatico.

Qual eh o tamanho do sistema com o qual usa Postgres?
O problema que vc diz, é performance?

Marcio_Nogueira

O Postgre atualmente tem se mostrado muito estável em ambiente Windows acho uma boa opção.

mueller

IMHO o volume de dados não é grande, e tanto PostgreSQL ou MySQL vão dar conta com bastante sobra da tarefa.

L

volume bem superior a 500.000 acho que no seu caso o postgre da conta do recado

T

Hum, o PostgreSQL ainda tem esse problema. Para cada conexão aberta com o banco, cria-se um novo processo.

L

aew thingol se poderia me explicar melhor como funciona isto pois esta fora do meu conhecimento ainda este esquema de cada conxao criar um novo processo ?pois vou utilizar o postgre no meu tcc.

W

Infelizmente, estamos falando de windows.
Cliente é quem manda…
Nada impede de vc. ter um servidor Linux e os clientes Windows, alias eu sou chegado num “Windows”, mais servidor Linux é o ideal, aproveita e dá uma olhada no SGBD DB2 Express C 9.1.2, talvéz resolva as suas necessidades.

rodrigoy

O HSQL-DB (embutido no Jboss) é uma boa opção?

T

No seu TCC não importa se é criado um processo novo para cada conexão ou não. Isso é apenas uma particularidade da implementação do PostgreSQL em Windows.

L

Putz, eu so queria uma explicação só pra saber como é isso pois não tenho conhecimento sobre o assunto.

T

É bastante simples, basta você instalar o PostgreSQL e pegar o Gerenciador de Processos para ver que quando o serviço é iniciado, aparece um executável chamado pg-ctl.exe, e quatro executáveis chamados postgres.exe. Quando você abre uma conexão com o banco, um novo executável aparece no ar, também chamado postgres.exe.

L

A agora entendi ja tinha reparado isso mas não sabia o que era.
valew cara .
mas só + uma perguntinha se eu estiver utilizando o hibernate e um pool de conexo~es tbm acontece isto cada vez que eu abrir uma sessao?

maquiavelbona

Apesar de eu preferir PgSQL ou MySQL, poderias dar uma olhada no Firebird que pode ser uma alternativa boa ao MySQL.

Até!

T

Pela minha experiência, com 500000 registros o HSQLDB abre o bico, a menos que você tenha uma quantidade de memória estupenda reservada para o Java rodar o HSQLDB, e você teria de pegar o arquivo .properties do banco de dados do HSQLDB e mexer em alguns parâmetros.

marcosbrandao

Não eh uma opção, usado com jboss, pois a aplicação vai rodar somente em tomcat. Pelo menos inicialmente.

Desculpe te perguntar , sei que eu deveria googlar isso, mas aqui na empresa tem poucos sites liberados.
Qual vantagem tem o firebird em relação ao MySql ou postgres?

maquiavelbona

marcosbrandao:

Desculpe te perguntar , sei que eu deveria googlar isso, mas aqui na empresa tem poucos sites liberados.
Qual vantagem tem o firebird em relação ao MySql ou postgres?

O Firebird é um projeto baseado na última versão open-source de Interbase ( grande conhecido dos programadores Delphi ).
Se analisar as opções e capacidades dos DBs, são muito parecidas (PgSQL, Firebird e MySQL utilizando InnoDB), dependendo em geral da filosofia de cada pessoa. Tanto PgSQL e Firebird são mantidos pela comunidade, enquanto o MySQL é mantido por uma empresa (MySQL AB).
Uma coisa que o MySQL pecava (não sei mais se peca, uso diariamente PgSQL) era que tinha um péssimo suporte a vários usuários e não era compatível ao ANSI-92. Outra coisa que tende a falácia é que o MySQL é mais performático, mas temos que lembrar que eles testam em MyISAM. Esse esquema de tabelas é inseguro, não suporta várias capacidades como stored procedures, e tem um duvidoso sistema de integridade. Para poder fazer uma comparação justa, tem que ser utilizado com InnoDB, que aí a conclusão vai ser a mais desapontadora possível: a performance cai violentamente e se compara a dos outros bancos concorrentes.
Particularmente, prefiro PgSQL, mas para uma opção Windows o Firebird substitue em bom tamanho.

Até!

nbluis

MySQL é um banco ótimo.

Mas até a ultima vez que trabalhei com MySQL(já era versão 5 alguma coisa), a própria empresa mysql recomendava que nenhuma tabela ultrapassasse o tamanho de 2GB.

E adivinha? Sim eu tinha uma tabela que crescia mais que isso. :smiley:

Era a tabela passar dos 2GB, o mysql ocupava todo o recurso de memória da maquina(linux).
Até que a swap acabava e travava a maquina toda, nem ping rolava;

Acabamos migrando essa aplicação para oracle.

Bom, mesmo com essa história dramática eu recomendo sim o mysql, mas se achas que vai crescer mais que isso, acho melhor buscar outras opções.

F

OpenSource:
1º FireBird 2º PostGreee
Pagos
1 Oracle
2 Sql Server

rafaelglauber

OpenSource:
1º FireBird 2º PostGreee

por quê?

Dieval_Guizelini

Fiquei curioso,

qual o problema de se ter um processo servidor (no servidor) para cada cliente?

Até onde eu sei, o Oracle apenas no modo MTS é que consegue “utilizar” um processo servidor para mais de um cliente. Mas ele compensa os vários processos com os processos em background e a SGA (compartilhando o cache do dicionário, as últimas querys e os últimos loads e planos de execução).

E pelo que li do PostgreSQL (apesar de bem mais simples) alguma coisa ele tem:

http://developer.postgresql.org/index.php/Buffer_Cache,_Checkpoints,_and_the_BGW

Em quais situações os processos “servers” deveriam compartilhar informações diferentes das informações do dicionário, e de carga… lembrando que o postgresql usa o modelo mvcc…
http://www.postgresql.org/docs/8.2/interactive/mvcc-intro.html

fw :lol:

Dieval_Guizelini

Para ajudar o nosso amigo,

mesmo o servidor sendo windows, o PostgreSQL é muito bom.

Recomendo apenas que:

crie no mínimo três partições (mesmo com o uso de raid), e coloque por exemplo:
primeira: SO e aplicativos
segunda: tablespace dos dados e o arquivo de paginação virtual do windows
terceira: tablespace dos índices.
na formatação, usando o ntfs, configure a segunda partição com blocos de 8k ou 16k
na formatação da terceira use 4k, que são ideais para os índices do postgresql

se for possível utilizar um disco extra (mesmo que seja sata), use-os para os archived, desta forma mesmo que ocorra uma pane muito grave (incluindo de hardware) será possível reconstruir o banco.

Alias, só pelos archived já se torna a melhor opção entre os livres. O firebird é muito bom, tenho dois amigos que os usam a bastante tempo, mas de vez enquanto eu ouço que eles tiverem dores de cabeça com atualizações do windows ou com problemas de backup.

fw

louds

Volume grandes nenhum dos dois dá pro cheiro. Tive em contato com um case que a volumetria era 500 selects/segundo e 200 inserts/segundo. Isso dá 17 milhões de registros novos por dia com purga mensal, ou seja, teria que suportar meio bilhão de registros. Nenhum banco de dados conseguiu atender com um custo razoavel. Pois não adianta resolver se tiver que gastar milhões com hardware.

500 mil registros? Até o access da conta disso. Você precisa ter um estudo do devido volume e simplesmente fazer um benchmark em um servidor windows. Existe cenário que favorece cada banco, então não existe ponto em discutir isso.

Você tem que verificar qual atende o seu problema e não o dos outros. Não pretende resolve o dos outros, certo?

Dieval_Guizelini

Louds,

o seu problema realmente seria interessante de ver a solução implementada, de cara eu acredito que vocês utilizaram clusterização. Mas posso te garantir que tanto o RAC como o Grid do Oracle da conta desse volume.

O INEP possui um servidor de banco de dados Oracle que atende sistemas que produzem mais de meio milhão de requisições/dia (não apenas dados simples, mas inclua blobs de tamanho inferiores a 4mb e soluções de olap para relatórios internos)

Eu montei em 2000 um cluster com 7 máquinas linux para atender o vestibular da UFPR usando tecnologia http://www.linuxvirtualserver.org/ e Oracle.

Mas o PostgreSQL não é fraco para situações de alta demanda. No Paraná a Celepar desenvolveu alguns sistemas utilizando o postgresql.

Deem uma olhada nestes artigos:

http://www.celepar.pr.gov.br/modules/noticias/print.php?storyid=51
http://www.xoops.pr.gov.br/modules/news/article.php?storyid=61

ou este extrato:

Tecnologia Livre

A tecnologia empregada é o principal destaque do projeto. O banco de dados está sendo construído inteiramente em software livre e usando o sistema PostgreSQL. Esta é a maior experiência da Celepar com este recurso.

O volume de armazenamento disponível para a implantação do novo sistema e expansões futuras é de 20 terabytes, o equivalente a 20 bilhões de bytes.

AMBIENTE CENTRAL

Entre os principais componentes de seu ambiente central, o sistema Detran utiliza uma plataforma de armazenamento de dados com capacidade de 20 Terabytes, servidores com 4 processadores de 12 GB RAM, licença Linux, switch de conteúdo Load Balance + Firewall, software de interconexão com o mainframe, software de gerenciamento de banco de dados SGBDR, solução Message Queue e Backup Restore.

A migração do banco de dados para Postgree produziu até agora mais de 3 mil páginas de especificação, 710 planos de testes e 170 tabelas.

http://www.pr.gov.br/batebyte/edicoes/2006/bb149/orgao.shtml

Quem está utilizando o PostgreSQL no Brasil:
http://www.postgresql.org.br/quem_est%C3%A1_usando

E um link de um tutorial para instalação do postgresql em Windows:
http://www.postgresql.org.br/PostgreSQLBrasil?action=AttachFile&do=get&target=tutorial_win32.pdf

fw

RodyBr

Uma dica: se vai trabalhar no ambiente Windows, seria bom dar uma olhada na versão Open do Oracle, e ver se ela atende a sua necessidade. Caso você opte mesmo pelo ambiente Linux, tenta montar um ambiente Ubuntu 7.10 com a ultima versão do Postgree. Será um bom treino para lidar com software livre, caso no futuro você mexa com algo assim.

:wink:

L

louds
Você tem que verificar qual atende o seu problema e não o dos outros. Não pretende resolve o dos outros, certo?

Sim pretendo ,Algum problema?

ozielneto

Concordo com louds , faça um estudo de volumes para estimar o sizing do banco…

Ordem de Escola ( WINDOWS ):

Oracle XE 10g ( Tablespace até 4GB )
DB2 Express 9
MySQL 5
PostgreSQL
Firebird
JavaDerby

Bom trabalho.

nbluis

Bom uma coisa é funcionar, outra coisa é a resposta em tempo hábil a sua necessidade.
Mas acredito sim que o oracle possa suportar isso, porém com um recurso de hardware alto e bem aplicado.

rodrigoy

É aconselhável colocar um banco com essas dimensões gigantes numa máquina Windows/Intel?

marcosbrandao

Bom, ontem a noite, fiz uma busca pra conhecer melhor as características de cada banco citado aqui.
E realmente a duvida eh bastante grande.

Um resumo Minhas conclusões:

  • Firebird: Vi muitos comentários de que não eh muito recomendado para usar com java. As melhores opções são postgres ou mySql. Algum comentario sobre isto?
  • Postrgres: boa escolha quando o sistema necessita de integridade referencial, pois eh mais robusto. Porém mais lento.
  • MySql: rápido. Ótimo para sistemas que utilizam muita consulta no banco.

O sistema que o cliente quer, precisa ter boa performance, pois durante o dia vai ter grande nível de consultas em tabelas grandes. A quantidade de transações talvez não seja muito grande durante o dia, mas o sistema terá um grande volume de transação de daods durante a noite, onde vai ser executada uma rotina todos os dias.

Eu preciso que o banco me de garantia nas transações, mas preciso que ele seja rápido. Por enquanto estou mais caido para o lado do Postrgres, pois acho que a integridade dos dados mais importante nesse momento.

você sabe me dizer quantos registros uma tabela pode ter pra alcançar este tamanho?(a tabela vai ter aprox 10 colunas, sendo chaves 5 chaves estrangeiras, um campo texto com limite de 150 caractere os outros campos são pequenos).

Dieval Guizelini:

Recomendo apenas que:

Infelizmente o cliente ja tem o servidor pronto e não pode ser configurado diferente do que eh hj. Só tive a liberdade de escolher o banco que será utilizado e em que tecnologia vai ser desenvolvido.

Pois é, achei que 500 mil registros era um grande volume de dados, que poderia trazer problemas para algum banco. Estava enganado. :?

Exatamente. Por isso que preciso da opinião de quem ja trabalhou com estes bancos, pra saber qual banco favorece mais a minha aplicação.

nbluis

O que seria “essas dimensões gigantes” ?
O que seria essa “máquina Windows/Intel” ?

Y

MySQL com MaxDB, pode ser?

http://dev.mysql.com/downloads/maxdb/

W

O que seria essa “máquina Windows/Intel” ?
Só não me diga que vai usar esses computadores comprados em supermercado ““Comp. Amd Atlhon64 X2 3600+ Dual Core/ Onboard/512 Mem/Hd 80 + Windows Vista”” e, não esqueça que em uma infra-estrutura de rede ruim vc. ira pagar pelo seu erro em dobro ok…

rodrigoy

Estou perguntando só para me antenar mesmo, vai ver as coisas mudaram de uns tempos pra cá no Windows Server. Imagine que você irá fazer uma aplicação Java Web para milhares de usuários simultâneos, 2000 selects por segundo, 800 inserts por segundo, um banco com uns 20 Teras… umas 4 máquinas em cluster.

Quanto estive em cenários desses, é HP-UX, Solaris… (tive medo de colocar Windows/Intel).

Num ambiente desses Windows Server aguenta o tranco num custo (H+S) razoável? Essa é a pergunta…

rodrigoy

Quando começa a ter que precisar do “PURGA” é que a gente vira gente grande…

T

Hum, o problema é que a máquina nunca fica mais de 15 dias de uptime porque há sempre uma atualização do Microsoft Update de 15 em 15 dias que normalmente requer um reboot. (Minha máquina de desenvolvimento é um 2003 Server, mas volta e meia preciso dar um reboot por causa do Windows Update, não porque o Windows seja intrinsecamente bugado.)

Eu não sei quanto ao Windows 64 bits - que seria o necessário se você quiser usar mais de 4 GB de RAM e uma máquina decente (não uma dessas de supermercado, nem mesmo um servidor IBM de R$ 1700,00 que às vezes você vê vendendo no jornal).

Ironlynx

Mas Louds, vimos que muitas empresas usam MySQL como uma solução para base.O que elas fazem para lidar com aquelas bases monumentais?
Eu mesmo que tenho um projeto pessoal, palnejado há uns 5 anos, que não sai por puro “cagaço” do medo da coisa crescer.

nbluis

A questão é, onde usam estas soluções ?
Por exemplo, não adianta a gente dizer que a empresa XYZ usa mysql, se é para o sistema de cadastro de horas extras na lavanderia. :smiley:

Sei que o google apóia o projeto mysql e inclusive iria disponibilizar as alterações feitas internamente para a comunidade.

Ironlynx

nbluis, veja um post recente colocado pelo Luca.Lá tem várias soluções de considerável porte usando o MySQL.

marcosbrandao

Qual seria este post?

nbluis

Opa, dai Ironlynx;

Manda o link do post ai, não consegui achar.
É nestra thread ?

Valeu.

Ironlynx

Olha o Link:
http://www.guj.com.br/posts/list/70875.java

louds

Dieval Guizelini, atender incluia também a questão preço. Não adiantava nada resolver o problema se tivesse que gastar milhões com hardware e software. O volume de dados era grande, mas bastaria usar um servidor gigante que resolveria, com mysql, pgsql ou Oracle - não seria nem o caso para usar Oracle RAC.

A solução adotada foi até que simples. Memcached e nada de banco de dados. O gasto total com hardware e software foi menor que uma única licensa do Oracle. Querem resolver tudo sempre com banco de dados dificilmente é o mais indicado.

Ahh, Dieval, vou ficar devendo ler os links que você passou, pois se o trecho que você colocou aqui já é cheio de erros, não quero ver o resto.

lgweb:
louds
Você tem que verificar qual atende o seu problema e não o dos outros. Não pretende resolve o dos outros, certo?

Sim pretendo ,Algum problema?

Na verdade, sim, tenho vários e fico te devendo uma por resolver eles para mim. Valeu! :wink:

Ironlynx, nenhum site desses usa apenas mysql, todos fazem uso de caching entre as aplicações e o banco. Fora isso, boa parte usa sharding e particionamento lógico do dados em múltiplos servidores. Eu seria tolo em dizer que não é possivel atender um volume enorme de dados com mysql (ou postgresql).

lucao

Galera, dando uma olhada naquela tabela que o Luca passou. Reparei que não existia Oracle entre os bancos citados e que o uso do Memcached era apenas em bancos Mysql.
Fazendo uma pesquisa rápida, pelo que entendi, o Memcached funciona como um cache :smiley: para o um banco que não trabalha, ou parcamente trabalha, com instruções na memória.
Alguém saberia informar quanto ao uso com o Oracle, já que ele possui diversas maneiras de diminuir o acesso ao disco, shared pool, buffer cache, large pool, redo log buffer, etc.
Ou se eu realmente não entendi direito seu uso e ele tem outra finalidade.

rodrigoallemand

lgweb:
louds
Você tem que verificar qual atende o seu problema e não o dos outros. Não pretende resolve o dos outros, certo?

Sim pretendo ,Algum problema?

Xiiiii!!! Problema nenhum, super-heroi! E essas soluções, são de graça?!?

louds

lucao:
Galera, dando uma olhada naquela tabela que o Luca passou. Reparei que não existia Oracle entre os bancos citados e que o uso do Memcached era apenas em bancos Mysql.
Fazendo uma pesquisa rápida, pelo que entendi, o Memcached funciona como um cache :smiley: para o um banco que não trabalha, ou parcamente trabalha, com instruções na memória.
Alguém saberia informar quanto ao uso com o Oracle, já que ele possui diversas maneiras de diminuir o acesso ao disco, shared pool, buffer cache, large pool, redo log buffer, etc.
Ou se eu realmente não entendi direito seu uso e ele tem outra finalidade.

O memcached é utilizado pois é um cache distribuido e particionado. No LiveJournal o pessoal executava uma instância em todo servidor web e isso permitia eles terem um cache com dúzias de gigas de tamanho, algo impraticavel para uma única máquina. Outro ponto é que o memcached é otimizado para operar em memoria e a performance de bancos de dados é muito inferior mesmo usando bases somente em memória.

Criado 30 de outubro de 2007
Ultima resposta 1 de nov. de 2007
Respostas 52
Participantes 20