Possivel dividir o Serve Save em partes?

cs007
Por cs007
em Resolvidos
  • 1
  • 2

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Galera gostaria de saber se tem como dividir o server seve em 3 partes para ele ficar bem leve para não dar o freeze já usei outros metodos mas não consegui configura-lo muito bem então se alguém quiser me ajudar vou ficar agradecido;

 

Exemplo:

 

salva uma parte depois de 5 minutos outra depois de 5 minutos outra.

 

REP++

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

Não. Não é possível.

 

O máximo que você pode fazer é otimizar seu banco de dados para uma execução mais rápida, como este tutorial feito pelo Gustavo ensina: Otimizando Server Save - Limites Do Otserv (100% Linux)

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Já faço uso desse script mas por se tratar de VPS não surtiu efeito e nem aqui na minha casa teve efeito.

 

Ninguém mais pode ajudar? Aceito opiniões :D

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

Já disse que não é possível.

 

int32_t LuaInterface::luaDoSaveServer(lua_State* L)
{
//doSaveServer([shallow = false])
bool shallow = false;
if(lua_gettop(L) > 0)
	shallow = popBoolean(L);

Dispatcher::getInstance().addTask(createTask(boost::bind(&Game::saveGameState, &g_game, shallow)));
lua_pushnil(L);
return 1;
}

 

Agora uma olha no Game:saveGameState

 

void Game::saveGameState(bool shallow)
{
std::clog << "> Saving server..." << std::endl;
uint64_t start = OTSYS_TIME();
if(gameState == GAMESTATE_NORMAL)
	setGameState(GAMESTATE_MAINTAIN);

IOLoginData* io = IOLoginData::getInstance();
for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
{
	it->second->loginPosition = it->second->getPosition();
	io->savePlayer(it->second, false, shallow);
}

map->saveMap();
ScriptEnviroment::saveGameState();
if(gameState == GAMESTATE_MAINTAIN)
	setGameState(GAMESTATE_NORMAL);

std::clog << "> SAVE: Complete in " << (OTSYS_TIME() - start) / (1000.) << " seconds using "
	<< asLowerCaseString(g_config.getString(ConfigManager::HOUSE_STORAGE))
	<< " house storage." << std::endl;
}

 

Mas se você acredita em milagres, só dividir esse for em vários.

 

for(AutoList<Player>::iterator it = Player::autoList.begin(); it != Player::autoList.end(); ++it)
{
	it->second->loginPosition = it->second->getPosition();
	io->savePlayer(it->second, false, shallow);
}

 

Mas dando uma olhada melhor, dá para separar em save de jogadores e save de mapa, que acho que já ajuda um pouco.

 

Abraços.

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Tem como me ajudar com isso? separar o save dos player e mapa? para ocorre 1 e depois de 5 minutos o outro?

 

,

esfomeado

GodLike
avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 25/11/10Posts: 52

Sim é possível.

Há varias maneiras de dividir o server save.

Podes primeiro fazer save dos players e depois das casas.

Podes gravar primeiro os players com id par e depois os com id impar.

Etc...

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Cara, a melhor coisa que você faz é juntar uma graninha e por um hd SSD em seu servidor, pronto seu server save está sem lagging.

Fabio Augustus - Infraestrutura

Skype: guhsvasc

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Beeki já fiz o pedido do HD é um dedicado melhor, mesmo assim queria dividir o save exemplo como ele disse, salvar players com ID ímpar depois Par e depois o mapa.

 

 

Se alguém souber e quiser me dizer o que tenho que modificar. minha distro e a trunk.r3884

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Beeki já fiz o pedido do HD é um dedicado melhor, mesmo assim queria dividir o save exemplo como ele disse, salvar players com ID ímpar depois Par e depois o mapa.

 

 

Se alguém souber e quiser me dizer o que tenho que modificar. minha distro e a trunk.r3884

 

Isso é inútil, tendo o HD que citei a cima, você pode salvar a DB toda de vez sem problemas.

Fabio Augustus - Infraestrutura

Skype: guhsvasc

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Sim. Concordo com você é só que essa duvida não era só minha saca? Tem um colega meu que não tem como pagar dedicado então ele também quer saber.

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

então, não é possível. Como o próprio oneshot citou acima.

Fabio Augustus - Infraestrutura

Skype: guhsvasc

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Pelo meu conhecimento básico sei que é possível editar e dividir. se eu não me engano já lê um poste seus que você disse que fez isso.

Beeki

Ex-Coordenador XDev
avatar
Herói
Herói

INFOS

Grupo: HeróiRegistrado: 12/03/11Posts: 1900Gênero: MasculinoChar no Tibia: Nokte

Pelo meu conhecimento básico sei que é possível editar e dividir. se eu não me engano já lê um poste seus que você disse que fez isso.

 

cara, se você sabe por que postou aqui? LoL,

Fabio Augustus - Infraestrutura

Skype: guhsvasc

cs007

Vim de longe
avatar
Conde
Conde

INFOS

Grupo: CondeRegistrado: 10/07/08Posts: 574Gênero: MasculinoChar no Tibia: Hebi Of Amera

Não lek sei que tem como fazer x.x eu quero que alguém me ajuda né.

  • 1
  • 2