MongoDB架构设计:Multikey Index与True Linking相结合

时间:2015-07-17 19:40:08

标签: mongodb meteor nosql

我正在使用 Meteor 构建一个Web应用程序 - 因此 MongoDB - 允许用户在日历上创建,管理和协作:

  • user可以包含多个calendars
  • 许多calendar可以共享users {/ 1}}。
  • 每个user在给定的role中都会有一个特定的calendar
  • calendar包含许多posts(但post只属于一个calendar。)

以下是我根据MongoDB documentation和本系列视频中关于MongoDB schema design的一些研究,设计数据库的方法。

第一

user document
  {
    _id: <ObjectId1>,
    firstName: "Mickael",
    lastName: "Jackson",
    emailAddress: "mickael.jackson@example.com",
    password: "#encrypted",
    calendars = [
      {
        _id: <ObjectId2>,
        role: "Owner"
      },
  }

这里的想法是:

  • Multikey Index数组使用calendar,这样我们就可以找到calendars的所有user并找到所有users calendar
  • 利用应用的访问模式:user将在登录时始终访问其calendars,但他很少会使用其中一个users查找calendars {1}} ...
  • ......从而优化了表现。

,然后

calendar document
  {
    _id: <ObjectId2>,
    title: "Holidays"
  }

post document
  {
    _id: <ObjectId3>,
    calendar: calendarId,
    date: "08122015",
    time: "0930",
    focus: "news",
    format: "link",
    blogTitle: 1,
    longCopy: "This is the long copy for this post.",
    shortCopy: "Short copy.",
    link: "http://www.google.com",
    hashtag: "#weekend",
    media: "image.png",
    promotion: "50",
    target: "Los Angeles",
    approval: "Ok",
    comment: "No comment"
  }

这里的想法是:

  • 利用calendar title不应经常更改的事实,尽管必要时可以更改。
  • 通过poststrue linking保留在单独的集合中,因为帖子很多(很多信息,包括媒体项),并且会超过 MongoDB 文档的16Mb限制如果嵌入calendars
  • 允许用户CRUD posts,而无需每次都写入calendarsprofile ...
  • ......从而优化了表现。

我对MongoDB的尝试并不多,我想知道:

  • 这种做法有意义吗?
  • 我们真的可以将Multikey索引与真正的链接结合起来吗?
  • 有没有更好的方法来实现我的目标?

0 个答案:

没有答案