【发布时间】:2017-04-26 15:09:00
【问题描述】:
我正在构建实时成就网络服务。
我目前的想法是在 MongoDB 中拥有一个成就集合以及一个玩家集合。我会将成就列表存储在成就集合中(可以修改该列表以添加新成就并用作成就定义),它将包含统计数据和阈值列表(完成成就的目标),而玩家集合将包含由 playerID 以及每个成就的字典作为键和许多统计信息(进度)作为值以及信息(完成与否)组成的对象。
当客户发布新的统计数据时,我会获取成就列表,并通过获取成就集合找到那些在其进程中使用这些统计数据的人。然后,我需要获取玩家收藏以查找哪些成就已经完成,并将这些成就从我当前要处理的成就列表中删除。然后我会再次获取玩家集合以获取其他统计数据并计算新进度。我需要更新玩家收藏的成就进度。如果成就完成,我会向客户端发送回调,以便它可以“实时”看到它。
我的问题是我需要该服务在高压下工作(数十万玩家发送大量新统计数据(例如击杀数,可能是数千个成就的数千个统计数据)),而我目前的想法似乎可以对数据库的调用太多了。
我想改用 MySQL 数据库,但我对它们不是很好,所以我不确定这样是否会更好(视图可以加快速度吗?)。 Redis 对于大型数据库来说似乎成本太高。
我应该使用更好的流程/设计模式吗?
有没有办法制作架构,以便在重负载时仍然很快?
我应该改用 MySQL 吗?如果是,那么可以帮助我加快速度的关键因素是什么? (所以我可以阅读它并设计更好的东西)
【问题讨论】:
标签: mysql mongodb rest scalability achievements