Jump to content
Good

Consultar em banco de dados ou ler arquivo?

Recommended Posts

Boa noite,

 

para um sistema que é muito acessado uma página básica, mas que sempre faz conexão com banco de dados apenas para ler uma informação que já é fixada, é muito raro ter uma atualização.

 

Então, pensando em economizar e acelerar o site, pensei nestas maneiras:

 

1. Já uso cloudflare, e ele guarda no cachê algumas informações. Pensei em gravar as informações em TXT, e sempre usar um file_get_contents (através de uma url) para ler as informações. Será que essas informações entrarão em cachê no cloudflare e poupará mais do servidor?

2. Então usar apenas cloudflare e puxar a informação de forma local.

3. Manter a conexão com banco de dados a cada acesso de um usuário

 

 

Qual das 3 opções seria mais viável para milhares de conexões diárias?

Share this post


Link to post
Share on other sites

Um banco MySQL suporta uma TONELADA de consultas e eu penso que se a informação algum dia pode ser mudada eu prefiro sempre utiliza-lo porque um arquivo estático pode ficar em cache e usuários terem informações desatualizadas.

 

Se os dados são "fixos" e não sofrem constante alterações, crie uma table em MySAM do mysql e tudo fica resolvido porque tabelas nesse formato são otimizadas para dados "estáticos".

 

Caso você ainda assim prefira utilizar arquivo, prefira por arquivos em JSON, mais fácil de serem manipulados.

 

Share this post


Link to post
Share on other sites
1 hora atrás, Guilherme Luiz disse:

Um banco MySQL suporta uma TONELADA de consultas e eu penso que se a informação algum dia pode ser mudada eu prefiro sempre utiliza-lo porque um arquivo estático pode ficar em cache e usuários terem informações desatualizadas.

 

Se os dados são "fixos" e não sofrem constante alterações, crie uma table em MySAM do mysql e tudo fica resolvido porque tabelas nesse formato são otimizadas para dados "estáticos".

 

Caso você ainda assim prefira utilizar arquivo, prefira por arquivos em JSON, mais fácil de serem manipulados.

 

 

Entendi. Mas tipo, como as configurações são atualizadas raramente. E ainda por mim, eu posso muito bem apagar o cachê lá do cloudflare.

 

A ideia é evitar conexões. Já que o servidor é compartilhado na hostgator, entendeu? Esqueci de citar isso kk,

 

A dúvida mesmo, é por exemplo, se tiver 10mil conexões simultâneas. É melhor qual das 3 opções? Vamos supor também que o arquivo tenha +- 250kb de informações. O que daria mais ou menos 250 registros do banco de dados. Eu preciso sempre puxar todas as informações.

 

Ficou mais claro agora né?

 

 

Share this post


Link to post
Share on other sites

A conexão ao banco é o menor dos seus problemas, lembre-se que um banco de dados é um arquivo que é gerenciado por um software especializado (SGBD).

 

No seu contexto, se os dados raramente são alterados (observe que isso por si só é um conceito bem abstrato) seria muito mais simples gerar os arquivos fisicamente e pronto.

 

Vou dar um exemplo concreto, um cliente pediu para gerar um sistema em que ele pudesse criar o menu dinamicamente, esse menu teria vários elementos aninhados:

Menu

- Submenu

-- Sub-Submenu

--- Sub-Sub-Submenu

Toda página que fosse aberta no sistema iria ter que renderizar esse menu, só que por ele ser "ilimitado" o cara poderia ter milhares de submenus, MAS depois de cadastrar tudo, ele raramente mudava/alterava/apagava algum item dentro do menu, solução? Sempre que ele alterava esse elemento, eu literalmente fazia a consulta e gravava o menu fisicamente em um arquivo e usava esse arquivo como include nas páginas do sistema, solução simples.

 

Tem que ver se isso é aplicável ao seu caso, lembrando que os SGBDs tem ferramentas de cache também, o que alivia muito a carga deles, que de fato é o que importa.

Share this post


Link to post
Share on other sites
6 horas atrás, ESerra disse:

A conexão ao banco é o menor dos seus problemas, lembre-se que um banco de dados é um arquivo que é gerenciado por um software especializado (SGBD).

 

No seu contexto, se os dados raramente são alterados (observe que isso por si só é um conceito bem abstrato) seria muito mais simples gerar os arquivos fisicamente e pronto.

 

Vou dar um exemplo concreto, um cliente pediu para gerar um sistema em que ele pudesse criar o menu dinamicamente, esse menu teria vários elementos aninhados:

Menu

- Submenu

-- Sub-Submenu

--- Sub-Sub-Submenu

Toda página que fosse aberta no sistema iria ter que renderizar esse menu, só que por ele ser "ilimitado" o cara poderia ter milhares de submenus, MAS depois de cadastrar tudo, ele raramente mudava/alterava/apagava algum item dentro do menu, solução? Sempre que ele alterava esse elemento, eu literalmente fazia a consulta e gravava o menu fisicamente em um arquivo e usava esse arquivo como include nas páginas do sistema, solução simples.

 

Tem que ver se isso é aplicável ao seu caso, lembrando que os SGBDs tem ferramentas de cache também, o que alivia muito a carga deles, que de fato é o que importa.

 

 

Então, o probelma não é gerar. A minha questão mesmo é saber qual é mais viável, que consuma menos servidor e não possa interromper o tráfego no site

Share this post


Link to post
Share on other sites

"Consuma menos servidor"? Memória? Processador? Banda?

 

Vamos usar apenas o raciocínio lógico:

 

Caso 1: ler um arquivo pronto:

Requisita arquivo ao servidor -> PHP lê o arquivo -> Arquivo é enviado para renderizar no cliente.

 

Caso 2: pegar informação no BD:

Requisita informação ao servidor -> requisita informação  ao PHP -> PHP requisita informação ao SGBD -> SGBD processa a informação e devolve ao PHP -> PHP processa a informação recebida -> Arquivo é enviado para renderizar ao cliente.

 

Pelo simples lógica o caso 1 vai consumir menos recursos (processador/memória). Agora veja que, se você usar algum tipo de cache, quando você fizer uma requisição ao servidor que já tenha sido feita, ele vai seguir o fluxo do "Caso 1", o cache foi criado exatamente para você poupar processamento de coisas que já foram "feitas" em algum momento anterior, se você tem uma opção de cache, use-a, sempre vai acabar sendo a solução mais simples para diminuir a carga de processamento/uso de memória do servidor.

Share this post


Link to post
Share on other sites
1 hora atrás, ESerra disse:

"Consuma menos servidor"? Memória? Processador? Banda?

 

Vamos usar apenas o raciocínio lógico:

 

Caso 1: ler um arquivo pronto:

Requisita arquivo ao servidor -> PHP lê o arquivo -> Arquivo é enviado para renderizar no cliente.

 

Caso 2: pegar informação no BD:

Requisita informação ao servidor -> requisita informação  ao PHP -> PHP requisita informação ao SGBD -> SGBD processa a informação e devolve ao PHP -> PHP processa a informação recebida -> Arquivo é enviado para renderizar ao cliente.

 

Pelo simples lógica o caso 1 vai consumir menos recursos (processador/memória). Agora veja que, se você usar algum tipo de cache, quando você fizer uma requisição ao servidor que já tenha sido feita, ele vai seguir o fluxo do "Caso 1", o cache foi criado exatamente para você poupar processamento de coisas que já foram "feitas" em algum momento anterior, se você tem uma opção de cache, use-a, sempre vai acabar sendo a solução mais simples para diminuir a carga de processamento/uso de memória do servidor.

 

 

Show!! Mto bom... e para este cachê, como você recomenda fazer?

Share this post


Link to post
Share on other sites

Tem que ver o que o teu servidor disponibiliza, por exemplo, a extensão memcached já diminuiria as requisições ao banco de dados, mas tem que ver se está disponível no seu servidor.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho um dominio e vários subdomios dentro.
      Quero saber como recuperar um cookie nos subdominios, uma vez que ele foi criado em um subdominio específico.
       
      Estrutura:
      Tô criando o cookie em usuario.dominio.com.br com o seguinte código:
       
      $valor = md5(uniqid(rand(), true));
      setcookie("token", $valor, time() + (60 * 10), "/", "www.dominio.com.br");
       
      Porém, quero recuperar esse valor em todos os outros subdominios, mas esse codigo aí não tá funcionando.
       
      Alguém pode ajudar?
      Valeu
       
    • By landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • By ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • By First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • By landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.