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 DinhoPHP
      Estou tentando enviar um anexo e o mesmo não chega no email, apenas quando não faço uso da função attach.
      arquivo que contém as functions responsáveis pelo envio do email.
      public function attach(string $filePath, string $fileName): Email{ $this->data->attach[$filePath] = $fileName; return $this; } Arquivo que utiliza a função attach.
      No arquivo que captura os dados do formulário, já passei os parâmetros de tudo quanto é jeito.
      require __DIR__ . "/include/head.php"; require __DIR__ . "/vendor/autoload.php"; use Source\Support\Email; $email = new Email(); // CAPTURANDO DADOS DO FORMULÁRIO $nome = trim(ucwords(preg_replace('/\s\s+/', ' ',($_POST['nome-curriculo'])))); $eemail = trim(strtolower(preg_replace('/\s\s+/', ' ',($_POST['email-curriculo'])))); $telefone = trim(preg_replace('/\s\s+/', ' ',($_POST['telefone-curriculo']))); $cidade = trim(preg_replace('/\s\s+/', ' ',($_POST['cidade-curriculo']))); $assunto = trim(preg_replace('/\s\s+/', ' ',($_POST['assunto-curriculo']))); $mensagem = trim(preg_replace('/\s\s+/', ' ',("<pre>".$_POST['mensagem-curriculo']."</pre>"))); // $file_tmp = ($_FILES['file'], $_POST['name']); $files = $_FILES['curriculo']; $email->add($assunto, "<h3>Nome: {$nome}<br>{$files['name']}<br>Email: {$eemail}<br><br>Telefone: {$telefone}<br><br>Cidade: {$cidade}<br><br></br>Mensagem:<br>{$mensagem}</h3>", $nome, $eemail)->attach($files['tmp_name'], $files['name'])->send(); var_dump($files); A função attach que recebe dois parâmetros, quando utilizada, não envia o anexo vindo do form HTML, já digitando os parâmetros na função, ela envia o anexo. Já li até alguns casos semelhantes aqui mesmo e nada! Só envia o anexo digitando os parâmetros manualmente. 
    • By Sapinn
      Como faço para trazer checkbox marcados com os dados do banco eu consigo enviar e cadastrar dados de checkbox marcados em uma tabela  SQL mas não sei como trazer os checkbox marcadas em uma listagem de PHP procedural.
    • By Rafaelmcd
      Olá, tenho um site em WordPress e preciso de uma regra para fazer um redirecionamento em massa, um redirecionamento 301.
      A regra seria mais ou menos assim, alterar links assim: https://site.com/blog/leia-top-games para https://site.com/blog/top-games
      Ou seja, precisa retirar o "leia-" de todos os link e redirecionar para o link novo.
      Alguém poderia me ajudar?
    • By Marcelodiehl
      Boa tarde,
      tenho um código php para envio de documentos para uma área do cliente e no admin onde eu realizo o upload dos documentos tem um input onoffswitch onde eu ativo ou desativo (Quando Ativo = "Mostrar na area dos clientes") mas quando envio um arquivo ele fica por default desativado, então tenho que ativar para que o cliente Visualize o documento. O que eu preciso é que este botão fique Ativado por default, mas não encontro no script onde mudo isso. Peço desculpas pela minha ignorancia em PHP, mas estou iniciando um curso esta semana, não sei muito ainda, mas já tenho este desafio. Alguém poderia me ajudar?
       
      <?php defined('BASEPATH') or exit('No direct script access allowed'); ?> <div class="modal fade" id="customer_file_share_file_with" data-total-contacts="<?php echo count($contacts); ?>" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> <h4 class="modal-title"><?php echo _l('share_file_with'); ?></h4> </div> <div class="modal-body"> <?php echo form_hidden('file_id'); ?> <?php echo render_select('share_contacts_id[]',$contacts,array('id',array('firstname','lastname')),'customer_contacts',array(get_primary_contact_user_id($client->userid)),array('multiple'=>true,'data-actions-box'=>true),array(),'','',false); ?> </div> <div class="modal-footer"> <button type="button" class="btn btn-default" data-dismiss="modal"><?php echo _l('close'); ?></button> <button type="button" class="btn btn-info" onclick="do_share_file_contacts();"><?php echo _l('confirm'); ?></button> </div> </div><!-- /.modal-content --> </div><!-- /.modal-dialog --> </div><!-- /.modal --> <h4 class="no-mtop bold"><?php echo _l('customer_attachments'); ?> <br /> <small class="text-info"><?php echo _l('customer_files_info_message'); ?></small> </h4> <hr /> <?php if(isset($client)){ ?> <?php echo form_open_multipart(admin_url('clients/upload_attachment/'.$client->userid),array('class'=>'dropzone','id'=>'client-attachments-upload')); ?> <input type="file" name="file" multiple /> <?php echo form_close(); ?> <div class="text-right mtop15"> <button class="gpicker" data-on-pick="customerGoogleDriveSave"> <i class="fa fa-google" aria-hidden="true"></i> <?php echo _l('choose_from_google_drive'); ?> </button> <div id="dropbox-chooser"></div> </div> <div class="attachments"> <div class="mtop25"> <table class="table dt-table scroll-responsive" data-order-col="2" data-order-type="desc"> <thead> <tr> <th width="30%"><?php echo _l('customer_attachments_file'); ?></th> <th><?php echo _l('customer_attachments_show_in_customers_area'); ?></th> <th><?php echo _l('file_date_uploaded'); ?></th> <th><?php echo _l('options'); ?></th> </tr> </thead> <tbody> <?php foreach($attachments as $type => $attachment){ $download_indicator = 'id'; $key_indicator = 'rel_id'; $upload_path = get_upload_path_by_type($type); if($type == 'invoice' || $type == 'proposal' || $type == 'estimate' || $type == 'credit_note'){ $url = site_url() .'download/file/sales_attachment/'; $download_indicator = 'attachment_key'; } else if($type == 'contract'){ $url = site_url() .'download/file/contract/'; $download_indicator = 'attachment_key'; } else if($type == 'lead'){ $url = site_url() .'download/file/lead_attachment/'; } else if($type == 'task'){ $url = site_url() .'download/file/taskattachment/'; $download_indicator = 'attachment_key'; } else if($type == 'ticket'){ $url = site_url() .'download/file/ticket/'; $key_indicator = 'ticketid'; } else if($type == 'customer'){ $url = site_url() .'download/file/client/'; $download_indicator = 'attachment_key'; } else if($type == 'expense'){ $url = site_url() .'download/file/expense/'; $download_indicator = 'rel_id'; } ?> <?php foreach($attachment as $_att){ ?> <tr id="tr_file_<?php echo $_att['id']; ?>"> <td> <?php $path = $upload_path . $_att[$key_indicator] . '/' . $_att['file_name']; $is_image = false; if(!isset($_att['external'])) { $attachment_url = $url . $_att[$download_indicator]; $is_image = is_image($path); $img_url = site_url('download/preview_image?path='.protected_file_url_by_path($path,true).'&type='.$_att['filetype']); $lightBoxUrl = site_url('download/preview_image?path='.protected_file_url_by_path($path).'&type='.$_att['filetype']); } else if(isset($_att['external']) && !empty($_att['external'])){ if(!empty($_att['thumbnail_link']) && $_att['external'] == 'dropbox'){ $is_image = true; $img_url = optimize_dropbox_thumbnail($_att['thumbnail_link']); } $attachment_url = $_att['external_link']; } if($is_image){ echo '<div class="preview_image">'; } ?> <a href="<?php if($is_image){ echo isset($lightBoxUrl) ? $lightBoxUrl : $img_url; } else {echo $attachment_url; } ?>"<?php if($is_image){ ?> data-lightbox="customer-profile" <?php } ?> class="display-block mbot5"> <?php if($is_image){ ?> <div class="table-image"> <div class="text-center"><i class="fa fa-spinner fa-spin mtop30"></i></div> <img src="#" class="img-table-loading" data-orig="<?php echo $img_url; ?>"> </div> <?php } else { ?> <i class="<?php echo get_mime_class($_att['filetype']); ?>"></i> <?php echo $_att['file_name']; ?> <?php } ?> </a> <?php if($is_image){ echo '</div>'; } ?> </td> <td> <div class="onoffswitch"<?php if($type != 'customer'){?> data-toggle="tooltip" data-title="<?php echo _l('customer_attachments_show_notice'); ?>" <?php } ?>> <input type="checkbox" <?php if($type != 'customer'){echo 'disabled';} ?> id="<?php echo $_att['id']; ?>" data-id="<?php echo $_att['id']; ?>" class="onoffswitch-checkbox customer_file" data-switch-url="<?php echo admin_url(); ?>misc/toggle_file_visibility" <?php if(isset($_att['visible_to_customer']) && $_att['visible_to_customer'] == 1){echo 'checked';} ?>> <label class="onoffswitch-label" for="<?php echo $_att['id']; ?>"></label> </div> <?php if($type == 'customer' && $_att['visible_to_customer'] == 1){ $file_visibility_message = ''; $total_shares = total_rows(db_prefix().'shared_customer_files',array('file_id'=>$_att['id'])); if($total_shares == 0){ $file_visibility_message = _l('file_share_visibility_notice'); } else { $share_contacts_id = get_customer_profile_file_sharing(array('file_id'=>$_att['id'])); if(count($share_contacts_id) == 0){ $file_visibility_message = _l('file_share_visibility_notice'); } } echo '<span class="text-warning'.(empty($file_visibility_message) || total_rows(db_prefix().'contacts',array('userid'=>$client->userid)) == 0 ? ' hide': '').'">'.$file_visibility_message.'</span>'; if(isset($share_contacts_id) && count($share_contacts_id) > 0){ $names = ''; $contacts_selected = ''; foreach($share_contacts_id as $file_share){ $names.= get_contact_full_name($file_share['contact_id']) .', '; $contacts_selected .= $file_share['contact_id'].','; } if($contacts_selected != ''){ $contacts_selected = substr($contacts_selected,0,-1); /**na linha abaixo em </a> ' . _l('share_file_with_show, trocando o _1 por 0 desabilita envio */ } if($names != ''){ echo '<a href="#" onclick="do_share_file_contacts(\''.$contacts_selected.'\','.$_att['id'].'); return false;"><i class="fa fa-pencil-square-o"></i></a> ' . _l('share_file_with_show',mb_substr($names, 0,-2)); } } } ?> </td> <td data-order="<?php echo $_att['dateadded']; ?>"><?php echo _dt($_att['dateadded']); ?></td> <td> <?php if(!isset($_att['external'])){ ?> <button type="button" data-toggle="modal" data-file-name="<?php echo $_att['file_name']; ?>" data-filetype="<?php echo $_att['filetype']; ?>" data-path="<?php echo $path; ?>" data-target="#send_file" class="btn btn-info btn-icon"><i class="fa fa-envelope"></i></button> <?php } else if(isset($_att['external']) && !empty($_att['external'])) { echo '<a href="'.$_att['external_link'].'" class="btn btn-info btn-icon" target="_blank">'.($_att['external'] == 'dropbox' ? '<i class="fa fa-dropbox"></i>' : '<i class="fa fa-google"></i>').'</a>'; } ?> <?php if($type == 'customer'){ ?> <a href="<?php echo admin_url('clients/delete_attachment/'.$_att['rel_id'].'/'.$_att['id']); ?>" class="btn btn-danger btn-icon _delete"><i class="fa fa-remove"></i></a> <?php } ?> </td> <?php } ?> </tr> <?php } ?> </tbody> </table> </div> </div> <?php include_once(APPPATH . 'views/admin/clients/modals/send_file_modal.php');  
    • By jdlucena
      Eu tenho um sistema em php e utilizei esse site http://www.pipsomania.com/best_php_obfuscator.do para ofuscar meu código.
       
      Porém, acabei perdendo o código original que estava no hd externo e agora o hd não funciona mais.
       
      Alguém conhece uma forma de reverter o código ofuscado? Entrei em contato com o desenvolvedor do site pipsomania.service@gmail.com mas não tive retorno.
       
      Exemplo de como ficou meu código:
      <?php ${"G\x4c\x4f\x42ALS"}["\x76v\x66\x68\x74\x77c\x73\x69\x70\x66"]="\x6c\x6f\x67i\x6e";if(version_compare(PHP_VERSION,"\x35\x2e3\x2e7","<")){exit("\x53\x6frry,\x20\x53i\x6d\x70le\x20\x50\x48P\x20\x4c\x6fgi\x6e\x20d\x6f\x65\x73\x20n\x6ft \x72un\x20on a P\x48P\x20v\x65r\x73\x69on \x73m\x61ller t\x68\x61n 5\x2e3\x2e7\x20\x21");}else if(version_compare(PHP_VERSION,"5\x2e\x35.0","<")){require_once("li\x62\x72\x61\x72\x69e\x73/p\x61\x73\x73\x77or\x64\x5f\x63om\x70ati\x62i\x6c\x69ty\x5f\x6c\x69b\x72a\x72y.\x70h\x70");}require_once("c\x6fn\x66\x69g/db\x2eph\x70");require_once("c\x6ca\x73se\x73/\x4cogin\x2ep\x68\x70");${${"GLOB\x41L\x53"}["v\x76f\x68\x74w\x63s\x69\x70\x66"]}=new Login();include("\x76\x69ew\x73/\x69n\x64\x65x.\x70\x68p"); ?>  
×

Important Information

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