0

我是一名 IT 学生,我们只在大学学习 RDBMS。我想与 MongoDB 取得联系,并开发一个仅用于教育目的的小型视频游戏集合管理器。

我想大致了解存储的可用平台。例如

  • 个人电脑
  • 的Xbox
  • Xbox 360
  • 游戏机

等等

选择平台时,我想查询与所选平台相匹配的所有条目。

所以我的第一个想法是必须要收藏:平台和游戏

平台:

_id : "PLATFORMID"
name : platform_one

游戏:

_id : "SOMEID"
name : game_One
publisher : somePublisher
platform : PLATFORMID

我知道将尽可能多的内容写入文档是一种最佳实践,但我认为在这种情况下并不理想,因为要获取所有可用平台,我必须查询所有游戏,然后遍历整个集合并选择出平台。

使用我的方法,可以在启动时仅加载平台,然后查询所有游戏。

我是对的还是 MongoDB 有更好的解决方案?

由于这是我第一个使用 NoSql DB 的项目,因此感谢您提供任何帮助或提示。

4

1 回答 1

0

在您设计架构之前,我建议您阅读以下内容:http ://docs.mongodb.org/manual/core/data-modeling/ ,因为它可以让您了解 mongo 中的不同数据模型是什么。这将为如何在 Mongo 中做事打下坚实的基础(这与传统的 RDB 非常不同)。

Mongo 模式高度依赖用例,因此数据结构与程序紧密集成。不要认为完全规范化数据是必要的,这在使用 mongo 时通常不是正确的方法。还要注意,一旦这是真的,就有许多不同的模式结构可供选择,而且通常需要的性能是如何做出选择。因此,具有完全相同数据的两个应用程序可能具有完全不同的数据结构,并且对于它们的用例都是正确的,并且它们使用其他应用程序是不正确的(如果您仍然喜欢性能)。对于您的具体情况,我建议将平台字段放入游戏文档中。要获得所有平台,有几种方法。第一种选择:拥有一个包含所有平台的集合。这些可以存储在 _id 字段中并且是唯一的内容,或者您​​可以拥有关于该平台的其他字段。这些平台将是独一无二的,程序逻辑必须保持更新。在为游戏集合创建文档时,应用程序可能仅提供平台作为此集合的选择列表。这将允许许多客户在廉价提供的平台上保持同步。请注意,没有外键,因此程序本身必须使这些集合保持同步。第二种选择:使用不同的:在为游戏集合创建文档时,应用程序可能仅提供平台作为此集合的选择列表。这将允许许多客户在廉价提供的平台上保持同步。请注意,没有外键,因此程序本身必须使这些集合保持同步。第二种选择:使用不同的:在为游戏集合创建文档时,应用程序可能仅提供平台作为此集合的选择列表。这将允许许多客户在廉价提供的平台上保持同步。请注意,没有外键,因此程序本身必须使这些集合保持同步。第二种选择:使用不同的:http://docs.mongodb.org/manual/reference/command/distinct/。这将返回查询的不同值。在这种特定情况下:

db.runCommand({distinct: "game", key: "platform", query: {} })

但是,在获取静态数据集的大型集合中,这可能过于昂贵。因此,如果密钥相对固定,则使用第一个选项可能会更好。如果键可以在查询之间发生变化,那么这个选项是最好的。

最好的,查理

于 2013-09-23T20:21:25.587 回答