我有兴趣创建一个网页游戏(在travian.com之类的)。我对php,sql和javascript有一些了解。我的问题是:
创建动态的基于时间的事件(如建筑施工时间等)的最佳方法是什么?
我具体谈到在一段时间后自动更改数据库的事件。根据我可以收集的信息,可以使用chron查询数据库以获取建筑物施工时间的更新,并在例如建筑时间+建筑开始时间=当前时间时更新它们。 这将是一个解决方案(我不喜欢这种解决方案,因为大多数网络服务员只允许1分钟间隔的chrons)。
另一种解决方案似乎是使用mysql事件,每次用户要求构建一个构建时,我们都会在数据库上创建一个对象,并在事件触发后更新它。这对我来说似乎是最直观的答案。
但是,我没有足够的经验或专业知识来确定是否有更好的解决方案,或者这些解决方案是否适用于这种“大”目的。
如果有人能在这个问题上给我一些启示或者指出我正确的方向,我会非常感激。我提前道歉,因为英语不是我的第一语言。
答案 0 :(得分:1)
我认为这里的答案取决于您需要进行的更新是时间驱动的还是事件驱动的,以及它们是否只是对数据库其他部分的更新。
如果它们纯粹是事件驱动的并且纯粹是对数据库的更新,那么SQL触发器可能是一个可行的选择。即便如此,业内人士对于使用触发器是否是一种良好做法的看法仍然不一,因为它可能使未来的开发人员难以找到变化的原因。触发器的另一个缺点是,在更新时它可能导致用户性能降低(因为数据库的工作要比初始更新要复杂得多)。
如果更新是时间驱动的,或者它们包含对数据库本身范围之外的任何内容的更新(例如,有时更新文件系统),或者您希望避免触发器以简化未来开发人员的维护,那么cron-工作方法是一个很好的选择。这里要解决的问题是,通过cron作业安排的大量更新可能会导致性能下降,因此在实现作业时需要减少这一点(选择关闭时间是一个选项,就像实现队列系统一样)运行更新,以便cron作业仅在允许其他数据库请求通过之前发出一定数量的更新。
就个人而言,我更喜欢cron-job +排队更新过程。