MongoDB适合这里吗?使用任意额外数据建模事件注册

时间:2012-01-13 10:24:15

标签: mongodb mongomapper

我正在编写一个基本的事件注册Web应用程序,我想知道MongoDB是否是数据存储区的一个好选择,如果是,那么如何建模我的域。该应用程序将非常小,因此性能和可伸缩性不是一个问题,但是当我开始用RDBMS第三范围的术语来思考模型时,它听起来很复杂,而且从我正在拾取的零碎部分开始关于Mongo,听起来像一个典型的用例。是吗?

应用

该应用程序允许创建事件,并为与会者注册这些事件,提供他们的姓名,出生日期等。轻松,两个表与n :n加入。棘手的部分是组织者希望能够向与会者询问特定事件的某些事件,例如,在一个事件中可能存在关于他们的住宿偏好的问题。我将其缩小为两类问题:需要从某些选项中选择的那些(将是HTML选择列表)和允许自由文本答案的问题。顺便说一句,它是一个Rails应用程序,以防万一。

传统RDBMS

在RDBMS中我可能需要一个用于约束问题的表格(其中答案来自列表),答案选项的表格,的表格自由文字问题免费文字答案;并通过注册将这一切适当地链接到活动和参与者。如果你考虑一下,表格之间的联系就相当复杂了!

蒙戈

在Mongo中建模会更简单吗?我认为,除了参加者事件集合之外,如果没有答案,可能会有一个问题集合,其中包含了允许的答案。然后它是自由文本。一个注册集合,它将参加者与活动相关联并引用相关问题的ID,并嵌入答案的文本?如果答案选项的文本发生了变化,它可能会变得复杂......但我猜这是Mongo的权衡。

如果我坚持使用Postgres,这对Mongo来说是一个很好的用例吗?你能建议一个(或改进我的)架构吗?

1 个答案:

答案 0 :(得分:0)

Mongodb是这项工作的绝佳工具。您可以在此处使用嵌入式集合来最大化性能。

您当前的架构非常好。通过对嵌入式集合稍微调整一下,这将是一个爆炸。

例如,您可以在参加者中找到问题集合,而不是单独保留问题集合。这样您就可以在一个地方存储有关与会者的所有相关信息。

- Attendee
     - Info
     - Event_id
     - Questions {
           -Question id
           - Answers [ {                  
                 - answer id 1
                 - or answer text
             },{                  
                 - answer id 2
                 - or answer text
             }],
     }

您还可以在Event集合中缓存有关与会者的常用数据。 这对于快速显示主页数据非常有用。

例如,您可能需要在活动主页中显示参加活动的用户及其计数。为此,您需要先查询事件并查询参加者。

但是我建议你把eventdee_id / name作为一个数组存储在Event中,看起来

  Event :
        - Info
        - attendees {
             attendee_id : 'xx'
             name : 'Fletch'
          }

因此,您可以使用对事件集合的单个数据库调用来填充事件主页。因为您可以获得有关用户的最小信息,并且将在此处检索事件的总用户数。当您需要显示有关用户的更多信息(例如他的问题/答案)时,您可以查询与会者。

希望这有帮助