Ir para conteúdo

POWERED BY:

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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

 

Compartilhar este post


Link para o post
Compartilhar em outros 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é?

 

 

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros 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?

Compartilhar este post


Link para o post
Compartilhar em outros 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.