CS
pedido

Possivel dividir o Serve Save em partes?

Por cs007, 23 de dez. de 2012 em Resolvidos

20
2.3k
cs007C
23 de dezembro de 2012 às 21:04

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

OneshotO
23 de dezembro de 2012 às 21:16

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 Dezembro 23 por Oneshot

cs007C
24 de dezembro de 2012 às 20:25

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

OneshotO
24 de dezembro de 2012 às 21:05

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 Dezembro 24 por Oneshot

cs007C
27 de dezembro de 2012 às 15:59

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

 

,

esfomeadoE
27 de dezembro de 2012 às 19:19

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

BeekiB
27 de dezembro de 2012 às 20:21

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.

cs007C
01 de janeiro de 2013 às 21:45

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

BeekiB
01 de janeiro de 2013 às 23:27

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.

cs007C
01 de janeiro de 2013 às 23:50

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.

BeekiB
02 de janeiro de 2013 às 11:06

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

cs007C
02 de janeiro de 2013 às 16:00

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.

02 de janeiro de 2013 às 17:10

cara com o mysql ajustado e tal da pra salvar no máximo 5s, eu pego 2s num global... no windows ainda.

já testei o hd ssd e ficou mema coisa ;3

BeekiB
02 de janeiro de 2013 às 17:30

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,

cs007C
02 de janeiro de 2013 às 19:26

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