LeafaR19 0 Denunciar post Postado Abril 24, 2009 Vou tentar explicar da melhor forma possível, mas não pe muito fácil.... Vou montar um jogo estilo MMORPG, mas é claro que tenho que fazer o possível pra não ficar fazendo consultas no mysql, aí pensei o seguinte, fazer um cache interno, java tem, e várias plataformas também ja vi, mas ainda não consegui acha pro PHP, sou um player, vou jogando e meus dados é gravado em um cache interno, e somente a cada 15 minutos iria salvar esses dados no DB, assim não averia tanta query indo para do DB/mysql e fazendo o servidor ficar lerdo, usaria um tipo de classe que salvaria tudo e depois enviaria... Alguém tem alguma idéia? Ex: cache interno de java package com.l2jfree.gameserver.datatables; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javolution.util.FastMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.l2jfree.Config; import com.l2jfree.L2DatabaseFactory; import com.l2jfree.gameserver.model.L2TeleportLocation; /** * This class ... * * @version $Revision: 1.3.2.2.2.3 $ $Date: 2005/03/27 15:29:18 $ */ public class TeleportLocationTable { private final static Log _log = LogFactory.getLog(TeleportLocationTable.class.getName()); private static TeleportLocationTable _instance; private FastMap<Integer, L2TeleportLocation> _teleports; public static TeleportLocationTable getInstance() { if (_instance == null) { _instance = new TeleportLocationTable(); _instance.reloadAll(); } return _instance; } private TeleportLocationTable() { } public void reloadAll() { _teleports = new FastMap<Integer, L2TeleportLocation>(); Connection con = null; try { try { con = L2DatabaseFactory.getInstance().getConnection(con); PreparedStatement statement = con.prepareStatement("SELECT Description, id, loc_x, loc_y, loc_z, price, fornoble FROM teleport"); ResultSet rset = statement.executeQuery(); L2TeleportLocation teleport; while (rset.next()) { teleport = new L2TeleportLocation(); teleport.setTeleId(rset.getInt("id")); teleport.setLocX(rset.getInt("loc_x")); teleport.setLocY(rset.getInt("loc_y")); teleport.setLocZ(rset.getInt("loc_z")); if (Config.ALT_GAME_FREE_TELEPORT) teleport.setPrice(0); else teleport.setPrice(rset.getInt("price")); teleport.setIsForNoble(rset.getInt("fornoble") == 1); _teleports.put(teleport.getTeleId(), teleport); } rset.close(); statement.close(); _log.info("TeleportLocationTable: Loaded " + _teleports.size() + " Teleport Location Templates."); } catch (Exception e) { _log.error("error while creating teleport table ", e); } } finally { try { if (con != null) con.close(); } catch (SQLException e) { e.printStackTrace(); } } } /** * @param template id * @return */ public L2TeleportLocation getTemplate(int id) { return _teleports.get(id); } } Ele salva todos os teleports em uma classe, assim quando alguem vai teleporta ele checa no "cache interno" e não no db, facilitando o mysql... Gostaria de fazer cache interno em PHP, não é tão fácil, tentei várias coisas, então vim aqui pra pedir ajuda de outros profissionais em PHP Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Abril 26, 2009 Acredito que você possa trabalhar com seções, ou persistir no objeto mesmo. php também tem OO ... Compartilhar este post Link para o post Compartilhar em outros sites
~TiuTalk~ 7 Denunciar post Postado Abril 26, 2009 Você pode ir salvando as informações em TXTs (ou XMLs) e de X em X minutos você roda um cronjob que pega todos esses arquivos e "publica" no banco de dados. Procure sobre memcached, talvez te ajude. ;) Compartilhar este post Link para o post Compartilhar em outros sites