首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中缓存数据与重新计算

在PHP中缓存数据与重新计算
EN

Stack Overflow用户
提问于 2009-09-09 05:04:03
回答 3查看 146关注 0票数 0

这是情况的内幕。我正在用PHP创建一个角色扮演游戏。战斗系统由不同的法术和减法术组成。战斗可能会有几个回合(它是针对AI的)。

我有两个想法来确保玩家数据的正确性(缓冲和去缓冲会随着时间的推移而过期。一个+5强度的增益只能持续1回合)。我可以

1)经历一个字符初始化序列,该序列从物品、设备、被动技能中获取用户的数据并对其进行更改,然后添加到缓冲区中,该缓冲区存储在会话中。如果buff存在,我会应用它。如果不是,它就没了。这种方式以牺牲性能为代价来确保数据的正确性……我想。

2)将整个角色数据存储在会话中,并更新buffs。当缓冲器被激活时,我添加修饰符,如果调试/缓冲器消失了,我必须记住‘回滚’或清除缓冲器有的任何效果。我假设这对DB的负担较小,但很难确保正确性,因为可能有如此多不同类型的缓冲区。

因此,就

a)数据库开销b)作战系统的可维护性c)工业在这种情况下的实践,

这两种解决方案的效果如何?还有什么我不知道的吗?我正在考虑使用订阅者模式来实现#2,但由于web是无状态的,这似乎增加了更多的开销。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-09-09 05:25:44

我将在这里使用“两者都不”,并告诉您我将采取的方法。

我可以假设,由于您的问题,您显然计划有一些像样的流量,并希望确保您的应用程序在负载下运行。话虽如此,您应该记住这里会话的性质。如果你曾经需要通过添加多个web服务器来分散负载来集群你的前端,那么PHP正常的基于文件的会话处理就变得相对无用了,因为你不能确保web访问者总是访问相同的前端服务器(嗯,你可能可以,但这将是困难的)。如果你在存储游戏状态,那么存储到cookie可能也不是最好的选择,因为你可能有超过4Kb的数据。

因此,下一步是使用新的处理程序将会话移动到中心点,该处理程序通常是您的数据库。您通过存储到session而获得的任何数据库收益现在都有一个偏移量,因为您仍然需要访问数据库。它可能不是很贵,但它不是理想的。基本上,您只是将数据捆绑在一起,并以不同的形式重写。

我在这里遵循的可伸缩性模式将最接近你的第一个。首先,每次重建buffs并确保数据的正确性。使用会话来降低一些性能,但不要过度依赖它们。当您开始遇到性能问题时,您将有几个选择。在可能的优先顺序中,它们将是:

  • 安装和使用memcached。缓存到内存,而不是缓存到会话!速度更快,性能也更好。
  • 将数据库和web服务器分隔到不同的服务器上。
  • 随着您的不断发展,将您的会话处理程序更改为面向数据库的,并添加更多web前端
票数 2
EN

Stack Overflow用户

发布于 2009-09-09 05:11:51

我引出了Knuth:“过早优化是万恶之源。”

您不知道此设计决策的实际性能影响是什么,并且您正处于开发过程中。在没有实际数据的情况下,不可能判断这是否会成为未来的瓶颈,可能还有其他因素导致你的应用程序比应该的速度慢10倍,你甚至都不知道。

测量。测试。使用真实世界数据。优化。

票数 3
EN

Stack Overflow用户

发布于 2009-09-09 05:06:45

字符数据有多广泛?是否可以简单地在会话中存储角色的所有统计信息和物品?如果是这样的话,你可以两全其美。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1397633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档