【问题标题】:Fast ranking system with database带数据库的快速排名系统
【发布时间】:2020-12-05 01:31:22
【问题描述】:

奇怪的标题,但没关系,

项目:
我正在创建一个游戏,玩家可以拥有一种货币,并且我想在玩家每次赚钱或亏钱时更新他们的排名(在他们耕种时可能高达 ~4 次/秒)。

问题:
货币存储在(MySql)数据库中,我不想为每个玩家加载该数据库 8 次/秒(以确保数量和加载排名)(这会很慢),但我也不想全部讲完在我的 RAM 中的服务器上玩过的每个玩家的余额只是为了计算他们的排名。

我的做法:
我试图将整个“排名表”分成多个部分(例如,1.part 货币 0-100 2. part 101-1000 等的玩家......)。如果当前未使用,我只会保护零件的大小(例如,有多少玩家拥有 1001 到 10'000 之间的货币)。但是,如果有一个玩家当前(〜在最后 30 秒内)在这部分中改变了他的平衡,我会加载并记录所有平衡和玩家(这部分)如果他再次改变他的平衡,我会更快地重新计算他​​的排名。(所以我基本上只会计算他在他的部分中的排名并添加上面所有部分的大小) 无论如何,当玩家改变他们的角色时我遇到了一些问题,我仍然不太确定我应该在什么时候更新数据库以使其保持最新。

我在这里寻找另一种(更好的)方法或一些有用的想法。谢谢,我真的找不到太多关于这个问题的资源。

【问题讨论】:

  • 你有多少玩家?数据库旨在经常更新。
  • 它应该被设计为存储多达 100'000 个玩家余额,这里的问题是我与数据库的连接不是那么快,每个请求我需要大约半秒。
  • 那么您将需要更快的连接。或者拥有一台也可以在其上拥有数据库的服务器。我会使用 PostgreSQL 而不是 MySQL,但这可能是我自己的偏见。

标签: java database optimization


【解决方案1】:

我可以建议您使用某种本地文件来存储玩家的金钱和排名,并且每次玩家输/赢钱/排名时,文件上的数据都会更改一次,大约每 1-2 次秒您从此文件修改数据库上的数据。一种缓存。所以你的系统不会太慢,当玩家想要查看他的排名/金钱时,他会有 1-2 秒的延迟。

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 1970-01-01
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多