Database design 基于MongoDB的数据库设计

Database design 基于MongoDB的数据库设计,database-design,mongodb,Database Design,Mongodb,我第一次使用MongoDB,我不完全确定在我所处的情况下最佳实践是什么。以下是我想做的: 我正在制作一个iPhone应用程序,人们可以在其中创建一个活动,然后聊一聊(比如说,为了解决一些细节问题)。我有一个活动的收藏品。不过,我不确定该如何存储用户的聊天记录。我想要一个聊天链接到它对应的事件,但我不确定如何做到这一点,因为MongoDB不是关系型的 我是否应该为聊天室创建另一个集合/文档并将其链接到活动(我指的是MongoDB链接) 我将从最简单的方法开始,设计一个事件集合,其中每个聊天帖子都是

我第一次使用MongoDB,我不完全确定在我所处的情况下最佳实践是什么。以下是我想做的:

我正在制作一个iPhone应用程序,人们可以在其中创建一个活动,然后聊一聊(比如说,为了解决一些细节问题)。我有一个活动的收藏品。不过,我不确定该如何存储用户的聊天记录。我想要一个聊天链接到它对应的事件,但我不确定如何做到这一点,因为MongoDB不是关系型的


我是否应该为聊天室创建另一个集合/文档并将其链接到活动(我指的是MongoDB链接)

我将从最简单的方法开始,设计一个事件集合,其中每个聊天帖子都是一个嵌入式文档。最近,如果性能需要,您可以将聊天转移到其他集合

我会将聊天嵌入事件文档中

似乎聊天总是在事件的上下文中引用,因此将其嵌入其中以便于访问是有意义的

对绩效的影响更为微妙。需要考虑的一些事项:

如果您使用嵌入式方法,当检索文档时,聊天内容可能已经包含在其中。因此,检索聊天记录不需要后续查询。这使得访问聊天变得很快,但也可能使检索事件文档的速度变慢(因为它们更大)。但是,您可以排除不需要的字段(这使得性能相当于具有两个不同集合的场景的性能)

如果您需要在不同于活动的上下文中使用聊天,那么有一天可能需要使用单独的集合。然而,现在嵌入它们的决定似乎是合理的,您可以编写一个简单的脚本将它们移动到自己的集合中

希望有帮助,干杯

设计MongoDB模式时的一个关键问题是何时嵌入和何时链接。嵌入是在BSON文档中嵌套对象和数组。链接是文档之间的引用

这是如何开始的

在设计文档数据库时,需要记住以下几点:

  • 哪个实体是父实体,哪个实体是子实体?他们真的有联系吗
  • 对父实体最常见的访问模型是什么?它总是需要把所有的孩子都带回来吗
  • 对子实体最常见的访问模型是什么?您是单独访问它,还是大部分时间与其父对象一起获取它
  • 您多长时间将子项附加到父项
  • 这些追加操作是否发生在高度并发的环境中
  • 您需要多久更新一次嵌入文档

  • 阅读我指出的MongoDB文档并回答上述问题将为您提供最终答案。

    在设计数据库模式时,请始终记住文档的大小限制。对于可数无限增长的子文档,最好将其存储在不同的集合中。这对于家长帖子中的评论、聊天等都适用。希望这有帮助