我应该如何组织MongoDB数据库?

时间:2016-10-16 03:47:43

标签: mongodb database nosql

我很擅长使用数据库,而且我一直在学习NoSQL和MySQL之间的差异。我正在构建一个Web应用程序,允许用户创建要放入日历的事件。

现在,我有一个用户名和密码的集合,以及存储其事件的每个用户的集合。但是当我阅读更多关于NoSQL的内容时,似乎我应该为所有事件创建一个集合,并将每个用户的事件存储在一个文档中。所以我在我的数据库中只有2个集合,一个用于用户名,一个用于事件。这似乎更有意义,但随后我会得到一个包含大型文档的非常大的事件集合。

这里的最佳做法是什么?我查看了很多MongoDB示例,但大多数只展示了包含一个集合的简单数据库。

1 个答案:

答案 0 :(得分:0)

MongoDB的有效建模并不那么明显。很少有明确的回应,但我会尝试给你一些提示。

NoSQL数据库的一个共同原则是根据您计划进行的请求对数据建模。如果您需要获取所有事件的列表,将所有事件存储在一个唯一的文档中会更有效。如果需要获取给定用户的所有文档列表,请将其事件列表存储在描述用户的文档中,依此类推。这可能会导致您复制一些数据:您可以同时拥有所有事件的列表以及每个用户文档中的事件列表。

然后是通常的dilemmna:你应该在描述用户的每个文档中嵌入完整的事件描述,只是简单地引用那个存储在另一个文档中的事件吗?

再次取决于您提出请求的方式。如果必须更新事件,最好只在用户文档中嵌入(部分)其不可变属性(至少是一个ID)。如果事件是不可变的 - 并且可能在此特定用例中 - 您可以在用户文档中嵌入整个事件描述。或至少在加载用户时有用的事件描述的所有字段。

考虑到尺寸,MongoDB's documentation中描述了限制。