Jump to content

[AJUDA] Consumo de processamento com SQLite


Recommended Posts

Olá!

Alguém pode me informar, se um arquivo .db fosse consultado de alguns em alguns segundos, em um servidor com mais de 100 jogadores, e que toda vez que ele logasse, fosse consultado o SQLite para carregar os dados, consumiria muito do cliente/servidor?

Link to comment

Para que serviria a consulta a cada x segundos ?

Você pode manipular a database apenas no login do player (obter dados) e no loggout/quit (salvar dados). Sendo que in-game, após o login, você salvaria os dados em uma variável/ementdata e manipularia ela... e quando o player sair do servidor você seta esses novos dados na database.

  • Like 1
Link to comment
On 28/11/2018 at 18:44, MaligNos said:

Para que serviria a consulta a cada x segundos ?

Você pode manipular a database apenas no login do player (obter dados) e no loggout/quit (salvar dados). Sendo que in-game, após o login, você salvaria os dados em uma variável/ementdata e manipularia ela... e quando o player sair do servidor você seta esses novos dados na database.

Sim, mas em um servidor com média de 100 players, que por exemplo a cada 2/3 minutos um jogador saísse, ou efetue login, acabaria consumindo?

On 28/11/2018 at 17:47, Lord Henry said:

Se for de alguns em alguns segundos, sim, consumiria bastante.

Usando um servidor MySQL tornaria o processo mais leve, ou daria no mesmo?

Link to comment

A consulta individual acredito que não afeta nada no servidor; Se tratando do salvamento automático em um intervalo de tempo (que os servidores com banco de dados costumam utilizar) - este irá causar um freeze temporário no servidor, que no caso já é esperado.

Nunca cheguei a ter um servidor com um fluxo grande de jogadores, então não sei te dizer o impacto gerado, acho que quem tem ou já teve um servidor com muitos jogadores e lida com esse grande fluxo de jogadores sabe responder melhor isso.

Tudo vai depender da qualidade do servidor é claro, mas também cabe ao desenvolvedor saber otimizar seus sistemas. Complementando o que o @MaligNos disse, o jogador loga, você carrega as informações, passam elas pra uma tabela para manipulá-las diretamente do código, e atualiza o seu banco de dados e limpa a tabela quando o jogador sai da conta/servidor.

A propósito, tabelas é o forte da linguagem Lua e nesse caso é uma ótima opção.

Link to comment
  • Other Languages Moderators

Bom, sou sub-dono e desenvolvedor de um servidor que já bateu 200 players e posso afirmar que se for dar save em todo mundo, vai dar um freeze bem considerável no servidor. É por isso que a maioria dos sistemas de save account funcionam somente ao logar na conta (recebe os dados do banco de dados) e ao sair do servidor/deslogar/perder conexão/quitar do MTA (salvar os dados no banco de dados). No caso, quando é feito assim, não causa lag pois não são feitos tantos acessos simultâneos ao banco de dados. O que causa o lag é justamente a quantidade de acessos que são feitos ao mesmo tempo, pois a quantidade de dados pendentes na sincronização é muito maior do que quando é feito um por um em momentos diferentes.

Imagine que o acesso ao banco de dados é um cara levando uma caixa. Você acha que é mais fácil ele fazer 1 única viagem com várias caixas ao mesmo tempo? Ou é mais fácil ele fazer cada viagem com 1 caixa?

5 hours ago, VazErn said:

Sim, mas em um servidor com média de 100 players, que por exemplo a cada 2/3 minutos um jogador saísse, ou efetue login, acabaria consumindo?

Se for 1 jogador, o consumo seria insignificante. Pouca quantidade de dados a ser processada ao mesmo tempo.

5 hours ago, VazErn said:

Usando um servidor MySQL tornaria o processo mais leve, ou daria no mesmo?

Daria no mesmo.

Edited by Lord Henry
  • Thanks 1
Link to comment
12 hours ago, Lord Henry said:

Bom, sou sub-dono e desenvolvedor de um servidor que já bateu 200 players e posso afirmar que se for dar save em todo mundo, vai dar um freeze bem considerável no servidor. É por isso que a maioria dos sistemas de save account funcionam somente ao logar na conta (recebe os dados do banco de dados) e ao sair do servidor/deslogar/perder conexão/quitar do MTA (salvar os dados no banco de dados). No caso, quando é feito assim, não causa lag pois não são feitos tantos acessos simultâneos ao banco de dados. O que causa o lag é justamente a quantidade de acessos que são feitos ao mesmo tempo, pois a quantidade de dados pendentes na sincronização é muito maior do que quando é feito um por um em momentos diferentes.

Imagine que o acesso ao banco de dados é um cara levando uma caixa. Você acha que é mais fácil ele fazer 1 única viagem com várias caixas ao mesmo tempo? Ou é mais fácil ele fazer cada viagem com 1 caixa?

Se for 1 jogador, o consumo seria insignificante. Pouca quantidade de dados a ser processada ao mesmo tempo.

Daria no mesmo.

Entendi perfeitamente. Obrigado!

No caso, a utilidade do MySQL, seria somente uma maneira mais segura de manter os dados salvos, não é?

Link to comment
  • Other Languages Moderators

Não sei se é mais seguro. Mas precisa de mais comandos para fazer a troca de dados. No MySQL vc precisa de um comando para iniciar a conexão com o banco de dados, e depois um comando para fazer as alterações. Já no SQLite você só envia e recebe os dados direto, sem necessidade de solicitar conexão.

  • Like 1
Link to comment
8 hours ago, Lord Henry said:

Não sei se é mais seguro. Mas precisa de mais comandos para fazer a troca de dados. No MySQL vc precisa de um comando para iniciar a conexão com o banco de dados, e depois um comando para fazer as alterações. Já no SQLite você só envia e recebe os dados direto, sem necessidade de solicitar conexão.

Não entendi isto, porque pelo o que eu li no dbConnect, a única diferença é que o MySQL tem alguns argumentos a mais (dbname, host, porta, usuário, senha), nos outros aspectos, utiliza as mesmas funções que usamos para SQLite (dbQuery, dbExec, dbPoll e etc)

Link to comment

A diferença de banco de dados local (o que talvez seja o que você tá usando) e banco de dados hospedado é que o hospedado vai ter o uso contínuo de largura de banda, essa eu acredito que seja a diferença mais relevante.

Edited by DNL291
  • Thanks 1
Link to comment

O MTA só possui o SQLite como database integrada.

Para utilização do MySQL deve-se instalar o respectivo servidor em sua máquina ou então efetuar a conexão de maneira remota, por isto a necessidade dos parâmetros: ip, porta, login e senha.

Ou seja, fica muito mais viável a utilização do próprio SQLite do MTA, pois caso use um MySQL remoto o delay nas transferências de dados aumentará significativamente.

E não tem qualquer relação com ele ser mais seguro ou não, até porque a database integrada do MTA é acessível só localmente. Já em servidores MySQL pode-se ocorrer de ficar acessível para qualquer um (o que o torna mais vulnerável).

Um diferencial que pode ser significativo, é que o MySQL possui uma gama maior de instruções/utilizações.

  • Thanks 1
Link to comment

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
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...