设计MongoDB集合与关系型方法的比较

3

我在设计我的MongoDB集合以满足需求方面遇到了困难。我之前的项目中只使用过SQL数据库,对于MongoDB这种NoSQL概念比较新。我目前正在学习如何存储和检索游戏统计信息(增强版排行榜示例)。在关系型数据库中,我会创建以下表:

Matches
:_id
:game_id    (reference to the type of game played)
:startedAt
:endedAt

Results
:match_id
:player_id  (reference to the users collection)
:field_id
:value

一场比赛可以有n个玩家,每个玩家都有n个结果。根据游戏类型,需要为每个玩家输入由field_id指示的多个结果值(例如得分和用户是否获胜 -> 两个字段=结果表中的两行)。 据我所知,在MongoDB中,将相关信息存储在一个集合中的概念是忽略我过去一年在关系型数据库中所做的事情并创建了以下集合结构:

Matches
:_id
:game_id
:startedAt
:endedAt
:players [{
    :player_id
    :results [{
        :field_id
        :value
    }]
}]

然而我现在遇到了计算特定玩家总成绩的困难,例如“计算A玩家在比赛B中获得的总积分”这样的查询很复杂,我担心性能会非常差。因此,在这种情况下,我仍然更喜欢关系模型。但是既然我想学习NoSQL数据库的概念,我仍然想知道是否有一种好的方法可以将数据结构化到单个集合中进行查询。

非常感谢您的任何建议。

1个回答

1

我刚开始学习MongoDB,但目前为止,我知道的是:

NOSQL数据库,如MongoDB,主要用于其可扩展性和灵活性。对于简单和小型项目,我看不到任何好处。

您所描述的情况是应该使用SQL的经典案例。

如果我被选中创建该数据库并且必须使用MongoDB,我会这样做: 1)保留您为比赛创建的集合, 2)基于玩家添加一个新的集合。

第二个集合将用于排行榜和所有基于玩家的内容。这意味着会有重复的数据,但没有其他方法来处理玩家搜索,这些搜索是您需要为排行榜进行的搜索。

也许只保存最新的比赛可能有效,但我仍然看不到任何好处。

正如我之前提到的,我也在学习过程中,所以我不确定百分之百。

祝您的项目好运。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接