1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Bases de Dados vs. files

Discussão em 'Programação' iniciada por AragTey, 23 de Outubro de 2007. (Respostas: 33; Visualizações: 1994)

  1. AragTey

    AragTey Power Member

    Boas, antes de mais dizem-me dizer que apesar de já programar a uns anitos nunca trabalhei com base de dados, por isso o meu conhecimente das mesmas é praticamente nulo.

    No entanto tenho andado agora a pensar na questão das bases de dados e não consigo compreender qual a grande vantagem das mesmas.

    Isto é tendo nós um programa com uma grande variedade e quantidade de dados, quais as vantagens de usar uma DB em vez de gravar de forma ordenada e optimizada os dados e files.

    Obrigado pelas dicas...
     
  2. HecKel

    HecKel The WORM

    Segurança!

    Acima de tudo, segurança.

    Ou encriptas bem o ficheiro de forma a só tu(o programa) saberes como o ler, ou então Base de Dados.

    Outros motivos são a velocidade de acesso aos dados, com SQL consegues percorrer uma base de dados na boa, com um ficheiro já não é assim tão linear..., tens de o carregar primeiro para depois poderes andar a brincar de uma forma mais prática.
     
  3. Koncaman

    Koncaman Utilizador Saloio

    e uma base dados tem uma flexibilidade muito maior.
    quando se trata de fazer cruzamentos de dados, por exemplo, é muito mais simples usar uma base de dados para o efeito.

    E com a complexidade, e quantidade de informação, recorrer a uma base de dados, é quase imprescindivel.
     
  4. xtr3me

    xtr3me Power Member

    Para além do acesso (que não só é mais simples, como também mais rápido), como o HecKel referiu, a alteração de dados, a inserção de dados ordenadamente, a relação entre entidades, etc.

    Tudo isto é trivial com bases de dados e com ficheiros já não é bem assim.

    Imagina o que é uma empresa guardar a informação toda respeitante a um cliente num ficheiro. Agora imagina que essa empresa tem 1000 clientes, já estás a ver o tamanho do ficheiro. Agora imagina que queres remover um cliente ... barrote. Faz-se, mas não é trivial.

    Isto só falando em alteração. Agora imagina o que é representares ligações entre diversas entidades, tudo sob a forma de ficheiros e depois teres de alterar essas relações, etc.

    E isto para não falar em propriedades como consistência dos dados, atomicidade das operações, concorrência (alteração dos dados de forma concorrente por programas diferentes), etc.

    Nem tem comparação ;)
     
  5. slack_guy

    slack_guy Power Member

    Um exemplo da vida real: sistema de gestão comercial.

    Se usasses o sistema de ficheiros terias qualquer coisa semelhante a (muito reduzido):
    Código:
    -- pasta_clientes
    ----- cliente_1.xml
    ----- cliente_2.xml
    ----- cliente_N.xml
    
    -- pasta_facturas
    ----- factura_1.xml
    ----- factura_2.xml
    ----- factura_N.xml
    
    -- pasta_recibos
    ----- recibo_1.xml
    ----- recibo_2.xml
    ----- recibo_N.xml
    
    Ora, só por aqui começas a perceber o problema: como relacionar cada documento com o respectivo cliente.
    Provavelmente, irias criar um ficheiro para cada cliente que cruzasse esses dados:
    Código:
    -- pasta_clientes
    ----- cliente_1_facturas.xml
    ----- cliente_1_recibos.xml
    ----- cliente_2_facturas.xml
    ----- cliente_2_recibos.xml
    ----- cliente_N_facturas.xml
    ----- cliente_N_recibos.xml
    
    Depois, vinha o problema seguinte: como relacionar cada recibo com as respectivas facturas. Talvez optasses por fazer:
    Código:
    -- pasta_recibos
    ----- recibo_1_facturas.xml
    ----- recibo_2_facturas.xml
    ----- recibo_N_facturas.xml
    
    AH! mas e se precisasses de saber quais os recibos referentes a uma determinada factura? bom, se calhar irias ter necessidade:
    Código:
    -- pasta_facturas
    ----- factura_1_recibos.xml
    ----- factura_2_recibos.xml
    ----- factura_N_recibos.xml
    
    Já estás a ver a coisa a complicar-se...

    Agora lembravas-te que precisavas de calcular a diferença entre o que foi facturado e o que foi recebido num determinado período. Ora, vá de percorrer todos os ficheiros referentes a facturas e, consoante a data, incrementar a variável total_facturado. Repetes a mesma operação com os ficheiros referentes a recibos para saberes o total_recebido. No final subtrais.

    Precisavas ainda de mostrar ao cliente a sua conta corrente: vá de percorrer todos os ficheiros de facturas e recibos e fazer as contas necessárias.

    Isto é uma mini-mini-amostra do embróglio em que estavas metido se não usasses um SGBD para este trabalho.
     
  6. LaNgSuYaR

    LaNgSuYaR Power Member

    Boas! Aproveito o tópico para lançar uma questão. As bases de dados trabalham da mesma forma, por ficheiros certo suponho!
    Um sistema de gestão de bases de dados carrega uma bd totalmente ou mantém ficheiros 'hash table' look alike para reduzir o consumo de memória e assim?
     
  7. AliFromCairo

    AliFromCairo Power Member

    Alternativamente, usavas XQuery :D.
     
  8. AragTey

    AragTey Power Member

    Pois foi exactamente por pensar nisso que resolvir perguntar aqui ao pessoal.


    Vamos la a ver em ultima instância as BD também vao usar ficheiros para armazenar e guardar a informação ou nem por isso?

    Por isso, não desprezando o trabalho de empresas como a ORACLE ou algo parecido, mas penso que isso qualquer entidade ou poderia fazer (evitando custos de licencas de BD), ou será uma tarefa abismal que mais vale pagar ao quem já o tem?

    Outro assunto que desconheco é o seguinte: supondo que temos um software ligado a uma BD, como funcionam esse processos, isto é existe uma ligação permanente do software com a BD, estando esta á espera de pedidos? Se sim como se reflete isso em termos de memória (ocupa muito ou nem por isso)?
     
  9. CoolMaster

    CoolMaster Power Member

    Concordo com tudo menos com uma coisa!
    Dizem que com bases de dados é mais rapido, de facto é mais rapido a nivel de desenvolvimento no entanto a nivel de processamento/execução abrir um ficheiro é muito mais rapido. Claro que existem DBMS mais rápidos que outros mas abrir um ficheiro e le-lo sequencialmente, fazer append (escrever no final) é mais rapido do que andar a fazer insert's numa bd. No entanto é obvio que a menos que se necessite de muita optimização um DBMS deve ser sempre a escolha.
     
  10. slack_guy

    slack_guy Power Member

    Nunca ouviste falar em PostgreSQL? ou mesmo MySQL? ou Firebird?

    Há mais sítios onde armazenar dados de forma persistente?
     
    Última edição: 23 de Outubro de 2007
  11. slack_guy

    slack_guy Power Member

    It depends. Pode ser de ambas as formas que referes. É evidente que no segundo cenário te ocupará mais memória enquanto que no primeiro te puxa mais pelo processador.
     
  12. xtr3me

    xtr3me Power Member

    Normalmente abres a ligação, fazes o que tens a fazer e fechas a ligação, para garantires que não há trincos que fiquem activos e depois outros acessos concorrentes possam dar barraca desnecessariamente.
     
  13. TheRieper

    TheRieper Power Member

    Agora peço eu desculpa pelo thread jacking mas vou fazer a minha PAT e vou ter que fazer com BD porque o meu prof não me quer ensinar a programar com ficheiros (cá para mim ele não sabe, porque muitas coisas dá por ficheiros que saca online:P).

    Eu vou precisar que a minha BD esteja sempre a interagir com o software que criarei (o software será para gerir uma loja de informática, stocks, funcionários, pedidos e reclamações, lucros, despesas, quanto dinheiro entra (não é o mesmo que lucro para quem ler a pressaXD), informações de vendas realizadas por funcionário X, reclamações dirigidas devido à falta de serviço de qualidade desse mesmo funcionário, ou até recomendações, fornecedores, informações dos clientes e respectivos descontos dependendo de determinadas caracteristicas definidas pelo admin do sistema/dono da loja), pois:

    - Sempre que um cliente pedir um serviço ou efectuar uma compra/venda, terá que não só ser actualizado o stock, mas também, terá que ser registada na conta do cliente que efectuou X compra/venda ou pedido de serviço. Será também actualizada a ficha do funcionário que atendeu o cliente adicionando nela a nova venda a outras já existentes.
    - Em caso de baixa de stock, será enviado um aviso ao admin.
    - Em caso de reclamação, esta também é reinviada automaticamente ao admin juntamente com as informações do cliente e do funcionário, etc...

    Agora diz-me, como é que farei isto sem dar barraca, pois o sistema terá que fazer tudo automáticamente, o funcionário só poem na lista os pedidos do cliente, e o resto o meu programa faz. se os trincos tem que ser constantemente fechados, não há problema em fazer algo assim? peço desculpa pela ignorância mas nunca nenhum prof meu me conseguiu esclarecer nada do que fosse mais "avançado"(se bem que isto ainda é bastante básico) em programação.

    Abraço
     
  14. xtr3me

    xtr3me Power Member

    A questão dos trincos é só para no caso de teres programas diferentes (ou threads diferentes) a aceder concorrentemente aos mesmos dados.

    Tens mecanismos para fazer rolback caso as transacções tenham falhas, por forma a evitar inconsistências nos dados, etc.

    Mas isso é algo que só saberás a fundo estudando um pouco da teórica de base de dados.

    Se só tens uma aplicação, a não ser que tenhas diversas "threads" do mesmo programa a aceder à bd, não deverás ter problemas. Basta-te fazer uma queue das operações a fazer e depois cada vez que queres aceder à bd, ligas, fazes a query e desligas e passas para a próxima.

    Já agora o programa é em quê? Página web php, aplicação stand-alone java, C, C# ?
     
  15. mccallister

    mccallister Power Member

    Em primeiro lugar base de dados não tem nada a ver com segurança... Qualquer pessoa tb sabe ler uma base de dados... É só fazer um select :D

    Agora em relação ao tópico Base de Dados vs Ficheiros tudo depende do que quiseres fazer e do volume de registos que está a pensar ter... Claro que as bases de dados são implementadas em "cima de ficheiros"...mas desenganem-se se acham que podem vocês mesmo implementar uma coisa parecida... Estamos a falar de rollback's, suporte multi-thread, particionamento de tabelas, etc... Isso é coisa pa levar anos e mesmo assim ficar mal feita :D

    Diria que se queres apenas fazer o store e o load de informação podes usar ficheiros...agora se pretendes suportar edit's e removes aí vais ter uma tarefa incomparávelmente mais difícil se não optares por BD...
     
  16. HecKel

    HecKel The WORM

    Então avisa os bancos :P Não vão eles estarem a ser roubados :P

    Existe segurança sim, e é um dos motivos mais fortes. Não sei quanto às outros SGBDs, mas com o Oracle até hierarquia de acesso às tabelas podes definir.

    E um select sem saberes as tabelas de que te vale? :P
     
  17. CrazyBomber

    CrazyBomber Power Member

    Ok, primeiro passo: olha para as features que qualquer sistema de bases de dados oferece, e depois diz-me quanto tempo demorarias a implementar essas features.

    Não se trata apenas de "guardar dados". É também como tratá-los. Por exemplo, criação de índices para tornar (muito) mais rápido o acesso aos dados que precisas. Manutenção dos dados, segurança, etc.
    Já para não falar que o SQL foi desenvolvido específicamente a pensar nestes problemas. Em apenas uma "frase" consegues obter os dados da forma que queres. A alternativa era teres de andar a programar cada "pergunta" à mão, ou, pior ainda, desenvolveres tu uma "linguagem" para comunicares o que queres com a base de dados. Não sei se estás a ver bem o tempo que perdias só a fazer isto...

    Bases de dados são excelentes e recomendam-se. Não vale a pena perder tempo em implementações dessas, que apenas te complicam a vida, não trazem nada de novo, e tornam muito mais complicada a manutenção do programa. No máximo, podes criar um sistema de bases de dados teu, mas... acho que terias que ficar anos a programar até conseguires ter algo semelhante ao que já encontras, grátis, na comunidade :)
     
  18. mccallister

    mccallister Power Member

    De certeza que os bancos devem ter pensado...ei pá...o nosso sistema não é mt seguro...humm...deixa-me lá por aqui um oracle topo de gama... :lol:


    Em Oracle como em quase todos as SGBD's podes definir vistas sobre as tabelas da BD e deixar que apenas determinados utilizadores da BD acedam às tabelas... Agora dizes que a maior razão para usar BD's é a segurança!? Também com ficheiros podes definir essas politicas de acesso por utilizador... Tudo depende de como implementas a tua aplicação... Se o teu código não estiver feito de forma a evitar certos ataques como por exemplo sql injection lá se vai a "tua" segurança... Nesse caso até te valia mais teres isso em ficheiros :D

    As vantagens de utilizar BD's são sobretudo ao nível de performance (podes escalar a tua aplicação sem grandes dificuldades), e simplicidade de implementação...
     
  19. AragTey

    AragTey Power Member

    Pois eu não duvido disso e não é minha pretensão passar os proximos 10 anos a desenvolver uma :) .

    Mas quando é que compensa incluir uma base de dados? Porque na minha opinião hoje em dia usam-se as base de dados para tudo e mais alguma coisa, mas de certeza que em muitas aplicações é mais aconselhado usar files, ou estou enganado? Mesmo para pouca informaçao é mais eficiente usar BD?

    Ainda não consegui perceber bem o funcinamento das BD, supondo que faço uma query a BD, o que irá acontecer? Os dados da BD já estão carregados em memória e é feita a query, ou após o pedido é que a informação vai ser carregada e depois de obter o resultado irá ser libertada essa memória?

    Neste momento parece-me que, para pequenas aplicações, as bases de dados só são uteis no caso de termos portabilidade dos dados, ou seja termos a mesma informação tanto em C, como um PHP para uma aplicação Web. Ou aqui também estou enganado :D.

    Obrigados a todos pelas respostas necessárias á iliminação de mi pobre sabedoria...lol
     
  20. slack_guy

    slack_guy Power Member

    Sempre que precises de armazenar e relacionar dados.
    A pergunta devia ser feita ao contrário: quando é que compensa usar ficheiros para armazenar dados. ;-)

    Por exemplo, eu costumo usar ficheiros para armazenar dados referentes a configurações de uma aplicação (dados que raramente são alterados, por exemplo: configurações para acesso à BD); e uso a BD para armazenar dados que precisem de ser relacionados entre si.
     

Partilhar esta Página