【问题标题】:Architecture: Creating a time filterable leaderboard system with mongoose架构:使用 mongoose 创建时间可过滤的排行榜系统
【发布时间】:2021-03-19 05:53:10
【问题描述】:

这个问题更多的是基于架构的问题。 我有一个网站,其中包含 3 个 PVP(玩家对玩家)游戏。每个游戏都有自己的 mongoDB 集合 它的文档具有时间戳、赢得的金额(积分)和参与的玩家等属性。

我想创建一个排行榜系统,从所有这 3 款游戏中检索数据,并显示在前 10 种风格中谁赢得最多。很可能通过 HTTP 端点访问该系统。而且我还希望这个排行榜可以按时间过滤:上周/月/年/所有时间的前 10 名

问题

随着用户数据库的增长和更多游戏的创建,每次到达终点时计算表所花费的时间越来越长。页面加载时间非常长。

初步构想

技术

Mongoose、Express、Nuxt(Vue)、Socket.io

【问题讨论】:

    标签: mongodb express vue.js mongoose architecture


    【解决方案1】:

    我会建议某种缓存方案。我会考虑两种基本方法:

    • 创建一个服务,自动将排行榜制成表格并将其缓存或保存到另一个 mongo 对象。然后为客户端提供缓存版本。这个选项很好,因为它创建了一个历史记录,可以在未来创造有趣的功能。
    • 在您的快速服务中缓存响应并仅在某个频率上更新它。正如这里所解释的:https://medium.com/the-node-js-collection/simple-server-side-cache-for-express-js-with-node-js-45ff296ca0f0 这种方法的风险是,如果您在生成排行榜时有并发请求,它可能会严重影响您的 mongo 服务器。

    在不了解所有细节的情况下,我会选择第一个选项,因为它不受并发请求的影响,并且将来可以通过某种历史排行榜功能进行扩展。

    至于过滤,我建议使用 vue-bootstrap 中的表格。数据很容易在表格中表示,并且内置排序。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 1970-01-01
      • 2019-10-09
      • 2021-03-09
      • 1970-01-01
      • 2019-10-22
      • 1970-01-01
      • 2013-08-31
      相关资源
      最近更新 更多