这是情况的内幕。我正在用PHP创建一个角色扮演游戏。战斗系统由不同的法术和减法术组成。战斗可能会有几个回合(它是针对AI的)。
我有两个想法来确保玩家数据的正确性(缓冲和去缓冲会随着时间的推移而过期。一个+5强度的增益只能持续1回合)。我可以
1)经历一个字符初始化序列,该序列从物品、设备、被动技能中获取用户的数据并对其进行更改,然后添加到缓冲区中,该缓冲区存储在会话中。如果buff存在,我会应用它。如果不是,它就没了。这种方式以牺牲性能为代价来确保数据的正确性……我想。
2)将整个角色数据存储在会话中,并更新buffs。当缓冲器被激活时,我添加修饰符,如果调试/缓冲器消失了,我必须记住‘回滚’或清除缓冲器有的任何效果。我假设这对DB的负担较小,但很难确保正确性,因为可能有如此多不同类型的缓冲区。
因此,就
a)数据库开销b)作战系统的可维护性c)工业在这种情况下的实践,
这两种解决方案的效果如何?还有什么我不知道的吗?我正在考虑使用订阅者模式来实现#2,但由于web是无状态的,这似乎增加了更多的开销。
发布于 2009-09-09 05:25:44
我将在这里使用“两者都不”,并告诉您我将采取的方法。
我可以假设,由于您的问题,您显然计划有一些像样的流量,并希望确保您的应用程序在负载下运行。话虽如此,您应该记住这里会话的性质。如果你曾经需要通过添加多个web服务器来分散负载来集群你的前端,那么PHP正常的基于文件的会话处理就变得相对无用了,因为你不能确保web访问者总是访问相同的前端服务器(嗯,你可能可以,但这将是困难的)。如果你在存储游戏状态,那么存储到cookie可能也不是最好的选择,因为你可能有超过4Kb的数据。
因此,下一步是使用新的处理程序将会话移动到中心点,该处理程序通常是您的数据库。您通过存储到session而获得的任何数据库收益现在都有一个偏移量,因为您仍然需要访问数据库。它可能不是很贵,但它不是理想的。基本上,您只是将数据捆绑在一起,并以不同的形式重写。
我在这里遵循的可伸缩性模式将最接近你的第一个。首先,每次重建buffs并确保数据的正确性。使用会话来降低一些性能,但不要过度依赖它们。当您开始遇到性能问题时,您将有几个选择。在可能的优先顺序中,它们将是:
发布于 2009-09-09 05:11:51
我引出了Knuth:“过早优化是万恶之源。”
您不知道此设计决策的实际性能影响是什么,并且您正处于开发过程中。在没有实际数据的情况下,不可能判断这是否会成为未来的瓶颈,可能还有其他因素导致你的应用程序比应该的速度慢10倍,你甚至都不知道。
测量。测试。使用真实世界数据。优化。
发布于 2009-09-09 05:06:45
字符数据有多广泛?是否可以简单地在会话中存储角色的所有统计信息和物品?如果是这样的话,你可以两全其美。
https://stackoverflow.com/questions/1397633
复制相似问题