【问题标题】:How can I store data for compiling leaderboards?如何存储用于编译排行榜的数据?
【发布时间】:2019-01-16 11:30:10
【问题描述】:

首先我想指出,我目前只使用 1 个节点,因为它可以很好地处理我当前的需求。而且,我正在使用 nodejs 来完成所有这些工作。

现在,这是我的问题。有一个 cassandra 表“playerdata”,它在视频游戏中存储了数百万玩家的数据。

我想编译排行榜,但我很清楚我无法通过此表进行此操作。

我需要检索每个人的数据,然后以不同的方式循环并编译各种排行榜。

但是,还有其他性能好的方法吗?

我首先想到的是地图,但后来我意识到这些是有限度的。 最好的选择是切换到用于排行榜的 SQL 数据库吗?

【问题讨论】:

  • 我对排行榜的理解是:根据一些标准显示玩家排名。如果是这样,我会为每个排行榜创建一个表格。当然,您会复制一些数据,但这就是 Cassandra 的工作方式。排行榜的每个查询都有自己的表格。为了获得更多建议,您应该分享更多关于您的模型、限制以及您的排行榜应该满足什么样的搜索条件...

标签: cassandra nosql cassandra-2.1


【解决方案1】:

您可以使用 Cassandra 对 order by 子句的支持。但 order by 仅支持集群键。因此,如果您想创建例如基于游戏点数的排行榜,您可以创建像 - ((gameId), userId, Points) 这样的模式。

【讨论】:

  • 您能否提供一个示例,说明我如何使用此架构获取它们?编辑:我假设它只是 SELECT userid, points FROM example WHERE gameid='1' ORDER BY points DESC 例如?
  • 是的,没错,您可以根据需要限制结果,
  • 是否可以有多种订购方式? - 假设您想要一个用于现金的排行榜,另一个用于等级
  • 在这种情况下,您应该考虑为每种情况创建不同的表。 Cassandra 在检索数据时不便于排序,而是用户应该以某种方式创建表,以便在插入本身时数据已经根据需要进行排序。由于 1 个表不能有 2 种排序顺序,因此对于每种类型的所需排序顺序,您应该考虑单独的表。为了使所有表中的数据保持一致,您可以考虑在插入时记录批处理语句。
猜你喜欢
  • 2022-01-01
  • 2014-07-16
  • 2018-07-28
  • 2020-07-29
  • 2012-09-08
  • 1970-01-01
  • 2013-04-12
  • 2020-12-25
  • 1970-01-01
相关资源
最近更新 更多