2

我有兴趣创建一个网页游戏(比如 travian.com)。我对php、sql和javascript有一些了解。我的问题是这样的:

创建基于时间的动态事件(如建筑施工时间等)的最佳方法是什么?

我特指在一段时间后自动更改数据库的事件。据我所知,可以使用 chron 查询数据库以获取建筑物建造时间的更新,并在例如建造时间 + 建造开始时间 = 当前时间的情况下更新它们。这将是一种解决方案(我不喜欢,因为大多数网络服务器只允许 1 分钟的间隔时间)。

另一种解决方案似乎是使用 mysql 事件,其中每次用户要求建造建筑物时,我们都会在数据库上创建一个对象并在事件触发后对其进行更新。这对我来说似乎是最直观的答案。

但是,我没有足够的经验或专业知识来确定是否有更好的解决方案,或者这些解决方案是否以任何方式适用于如此“大”的目的。

如果有人可以就这个问题给我一些启示,或者指出我正确的方向,我将不胜感激。我提前道歉,因为英语不是我的第一语言。

4

1 回答 1

1

我相信这里的答案取决于您需要进行的更新是时间驱动的还是事件驱动的,以及它们是否是对数据库其他部分的专有更新。

如果它们是纯粹的事件驱动和纯粹的数据库更新,那么 SQL 触发器可能是一个可行的选择。即便如此,业界对使用触发器是否是一种好的做法的看法也参差不齐,因为这会使未来的开发人员难以找到改变的原因。触发器的另一个缺点是它可能会导致更新时用户的性能变慢(因为数据库比初始更新有更复杂的工作要做)。

如果更新是时间驱动的,或者它们包括对数据库本身范围之外的任何内容的更新(例如,有时更新文件系统),或者您希望避免使用触发器来简化未来开发人员的维护,那么 cron-job 方法是一个很好的选择。这里的一个问题是,通过 cron 作业安排的大量更新可能会导致性能下降,因此在实施作业时需要减轻这种情况(选择关闭时间是这里的一种选择,实施队列系统也是如此运行更新,以便 cron 作业在让其他数据库请求通过之前只发布一定数量的更新)。

就个人而言,我更喜欢 cron-job + 排队更新过程。

于 2013-07-09T16:19:59.610 回答