【问题标题】:Building a live database (approach)构建实时数据库(方法)
【发布时间】:2016-12-28 04:29:36
【问题描述】:

我只是想要一种关于如何使用实时记录构建数据库的方法,所以不要只是投反对票。我不希望有任何代码。

目前我有一个拥有大约 2000 个用户的 MySql 数据库,但他们正在变得越来越多。每个玩家/用户都有几个点,这些点会随着某些动作而增加或减少。

我的目标是这个数据库大约每秒刷新一次,并且点数更多的用户向上移动,其他用户向下移动......等等

我的问题是,对于这个必须每秒更新记录的“实时数据库”,最好的方法是什么。在 MySql 中,我可以运行执行 SQL 命令的基于时间的操作,但这不是我认为的最佳方式。有人可以提出一个处理这个问题的好方法吗?例如。其他数据库提供商,例如 MongoDB 或其他什么?

编辑

这在客户端不起作用,因此由于一些基于时间的事件,我不能简单地将其推送/发布到数据库中。解释:用户正在应用程序中训练他的角色。此培训(升级 1 级)需要 12 个小时。时间过去后,如果用户没有自己发送发布请求(如果用户未登录),则数据库中的记录也应自动更新(如果用户未登录),其他用户应在其个人资料中看到更新的数据。

【问题讨论】:

  • 如果玩家的动作发生,则将其存储在您的表中。要获得数据的实时视图,请在每次要刷新 GUI 时运行特定查询
  • 不,这并不容易,因为某些任务需要大约 1 天或更长时间才能完成。如果用户登录,我只能将它们推送/发布到服务器,并且可能是一个事件需要 1 天,但他在 1 周后登录,此时没有更新记录。 @juergend
  • 您可以为此目的使用 jquery ajax
  • 你能举一个需要更多时间(比如几天)的事件的例子吗?
  • 始终更新包含数据的数据库。我认为关键是获取数据,以便为查看数据的每个人实时更改。如果以分散方式(如 1000 点,分散在 3 天)给用户点数,您可以存储日期/时间并在每次需要时计算当前点数。如果一个用户完成一个流程 1.5 天,你可以计算它有 500 分,而不需要每秒更新数据库。

标签: php mysql sql mongodb database


【解决方案1】:

您需要接受排名在某种程度上会过时的事实。您的困境与任何其他游戏平台(或就此而言的 SO 排名)没有什么不同。业务决策已落实到位,并不断审查陈旧程度。以这里的标签排行榜为例。或者最近的更改使个人资料页面更新得更频繁,而不是格林威治标准时间凌晨 4 点左右。

考虑使用 MySQL 事件。它是替代 cron 任务的内置功能。如果有兴趣,我的个人资料页面上有 3 个与活动相关的链接。您可以按时间安排计算排名(您对陈旧的容忍度),并且用户对他们的请求会很快(比 Gordon 的以下请求更快)。另一方面,它们已经过时了。

考虑不保存(写入)排名信息,而只专注于填充其他数据的插槽。并即时获得您的排名。例如,请参阅 Gordon 的此排名答案 here。它是动态的,根据请求运行,至少在那一刻没有过时,并且不需要事件。

知道只有您应该决定 UX 可以接受的内容。

【讨论】:

  • 感谢您提供非常详细的回答。所以你会建议我在 MySQL 中使用事件?就像每 10 秒计算一次排名之类的?是否可以用它计算数千条记录,或者这很慢?如果是,有其他解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2020-01-20
  • 2018-04-07
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-21
  • 1970-01-01
相关资源
最近更新 更多