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

What is the best way to create dynamic time-based events like building construction times,etc?

本文关键字:时间等 建筑施工 最佳 方式 是什么 事件 时间 创建 动态 于时间      更新时间:2023-09-26

我有兴趣创建一个网络游戏(在travian.com之类的网站上)。我对php、sql和javascript有一些了解。我的问题是:

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

我特别指的是在一段时间后自动更改数据库的事件。根据我所能收集到的信息,可以使用chron查询数据库以获取建筑施工时间的更新,并更新它们,例如,如果建筑时间+施工开始时间=当前时间。这将是一种解决方案(我不喜欢,因为大多数Web服务器只允许1分钟的时间间隔)。

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

然而,我没有足够的经验或专业知识来弄清楚是否有更好的解决方案,或者这些解决方案是否在任何方面都适用于如此"大"的目的。

如果有人能给我一些关于这个问题的线索,或者为我指明正确的方向,我将不胜感激。我提前道歉,因为英语不是我的第一语言。

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

如果它们纯粹是事件驱动的,纯粹是对数据库的更新,那么SQL触发器可能是一个可行的选项。即便如此,业界对使用触发器是否是一种好的做法也众说纷纭,因为这会使未来的开发人员很难找到改变的原因。触发器的另一个缺点是,它可能会导致用户在进行更新时的性能降低(因为数据库要做的工作比初始更新更复杂)。

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

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