了解特定用例的mongodb性能

8nuwlpux  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(242)

我在一个完整的重新设计我现有的青年体育联盟网站的开始阶段(www.parochialathleticleague.org),使用vue.js作为前端,并且需要对后端结构做出最终决定,以便我可以继续进行项目。在过去的5年里,我们使用mysql数据库和定制的php脚本作为中介来发送、接收和编辑联赛时间表和排名等数据。
我相信我可以再次有效地使用mysql,也许是使用更智能的表结构,但是我非常好奇是否有可能将mongodb用于这个项目,而不是作为nosql实验。我知道,我知道。。mongo有很多讨厌的地方,它最适合于非常具体的用例,但是我认为熟悉它是一件有趣的事情,以供将来参考。
也就是说,如果我决定使用mongo,我将非常感谢那些对这个提议的用例中的数据库性能有更多经验的人的一些见解。具体来说,我将考虑三个潜在的选项来组织计划数据。请看下面(我为每个选项提供了一个游戏数据示例):
选项1-系列:“2018男孩篮球-海岸2a”

{
    "date": "September 7",
    "time": "3:30 PM"
    "home": "Blessed Sacrament"
    "h_score": 0,
    "visitor": "St. Columban",
    "v_score": 0,
    "location": "Blessed Sacrament",
    "game_id": 260
}

在上面提出的解决方案中,我将为每个除法创建一个单独的集合。上个赛季,篮球运动共有34个赛区,因此在本例中,这相当于34个赛区。这意味着更多的组织开销和更多的时间来配置,但逻辑决定了它是最终用户最快的解决方案,因为任何一个部门最多只能容纳50个游戏。这也是我如何在我们现有网站的mysql解决方案中设置它的:每个分区一个表。
选项2-系列:“2018男孩篮球”

{
    "date": "September 7",
    "time": "3:30 PM"
    "home": "Blessed Sacrament"
    "h_score": 0,
    "visitor": "St. Columban",
    "v_score": 0,
    "location": "Blessed Sacrament",
    "game_id": 260,
    "division": "Coastal 2A"    
}

在上述建议的解决方案中,我将为每个性别单独收集,结果只有两个收集-一个用于所有男孩的篮球比赛,一个用于女孩的篮球比赛。就组织和设置而言,这似乎比必须创建34个集合(如上面的示例所示)要理想得多。不过,我不确定最终用户的速度会慢多少,因为现在这个系列最多可以容纳500个游戏,而不是50个。因此,在浏览器中呈现一个特定分区的时间表之前,通过500个ish游戏来解析该分区的50个左右的位置可能是一个问题——或者,希望不是这样!
选项3-系列:“2018篮球”

{
    "date": "September 7",
    "time": "3:30 PM"
    "home": "Blessed Sacrament"
    "h_score": 0,
    "visitor": "St. Columban",
    "v_score": 0,
    "location": "Blessed Sacrament",
    "game_id": 260,
    "division": "Coastal 2A",
    "gender": "boys"
}

在上面提出的解决方案中,我将为特定赛季的所有比赛制作一个集合。这可能意味着总共有1000个游戏,我认为最终用户的速度可能会成为一个真正的问题。
非常感谢您的意见和建议。在做出最终决定之前,我会非常重视一些真实世界的反馈。另外,如果你认为我是个十足的白痴(我不一定不同意!)在这个项目中,我肯定会坚持使用sql,我会对上述三个选项提出同样的问题,只是在表/行结构中。非常感谢!

gcuhipw9

gcuhipw91#

您需要记住的一点是,mongodb(以及大多数文档存储解决方案)中的模式设计通常围绕嵌入文档展开。所以,你最好还是把比赛本身放在部门文件里。然后游戏可能会更好地包含,以及,球队,球员等的细节。
当然,您可以规范化数据(就像在关系数据库中一样),但您可能会依赖反模式,并遇到恼人的性能问题。
mongodb还为每个文档设置了16mb的上限,因此在设计模式时需要考虑到这一点。
顺便说一下,既然你提到你有mysql的背景。现在,mysql还提供了一个文档存储,类似于mongodb(但有一些不同)。在你的情况下,可能要学的东西会少很多,所以也许你应该看看。
免责声明:我在oracle的mysql连接器团队工作。

相关问题