Ir para conteúdo
  • 0

Possivel dividir o Serve Save em partes?


cs007

Pergunta

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++

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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)

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

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.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

  • 0

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...

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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,

Link para o comentário
Compartilhar em outros sites

  • 0

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

 

você não quer que alguém te ajude, você quer que alguém faça pra você.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...