基本的mongodb理论

7 database mongodb nosql

毫无疑问这将是一个愚蠢的问题,当答案指出这一切的明显简单性时,我们都会笑到它是多么愚蠢,但是在关系数据库的艺术中坚定地被灌输我似乎无法理解我的头脑完全围绕mongodb - 无论我阅读多少文章或我观看的视频.

这是我的情况.我有一个可能拥有数百万用户的项目.核心功能:

  • 拥有4种不同类型的用户列表
  • 这些用户中的一种可以创建事件
  • 其他用户类型可以申请在活动中执行(申请方和组织方之间有一个请求系统就条款达成一致)
  • 其他用户类型可以参加活动
  • 所有用户类型都可以关注该事件
  • 每个用户都可以将无限量的图像上传到他们的"图库"

现在我会立即知道如何规范MySQL数据库并加入查询以获取我需要的数据,但是mongodb呢?

由于所有这些信息都与用户有关,我只为用户创建一个集合吗?对于每个用户,我是否创建了一个文档?此文档是否存储了与该用户相关的事件,请求和图像的所有详细信息 - 或者仅仅是某些我对这些事物的ID,我会交叉引用?如果不是,那么这将不会复制大量数据 - 即,如果我必须为在该事件之后/参加/执行的每个用户复制所有事件数据并将其放入该用户文档中(我确定不是这种情况) - 但如果没有连接,如果事件存储在另一个集合中,如何将"加入"用户和所有事件数据?).那图像怎么样?用户文档可以是16mb - 但是如果我允许无限制的图像并且与用户相关的所有内容都存储在单个文档中,那么单独的图像可能比单个文档大吗?

我确信我对理解mongodb非常重要 - 启发我!

谢谢.

Ram*_*Vel 3

您可以使用 2 个不同的用户和事件集合来设计您的应用程序。像这样的东西

UserDocument Collection
    -Type
    -Details    

EventDocument Collection
    -Created By
    -EventDetail
    -AppliedUsers
         -"User A",User B"
    -AttendingUsers
         -"User C",User D"
    -FollowingUsers
         -"User E",User F"
Run Code Online (Sandbox Code Playgroud)

活动文档使用Dbref获取已申请、参加和关注的用户的所有用户 ID 。

另一种方法是将经常访问的用户文档字段与 DBref 对象一起存储。这避免了对数据库的不必要的点击以及在文档中存储冗余(完整的用户数据)数据。就像是

 EventDocument Collection
    -Created By
    -EventDetail
    -AppliedUsers
         -"User"
             - Name
             - XXX
             - DbRef to User A
    -AttendingUsers
         -"User"
             - Name
             - XXX
             - DbRef to User B

    -FollowingUsers
         -"User"
             - Name
             - XXX
             - DbRef to User C

         -"User"
             - Name
             - XXX
             - DbRef to User D
Run Code Online (Sandbox Code Playgroud)

对于图像,您可以使用 GridF。这会将大文件分割成更小的块。