我应该如何构建MongoDB的数据模式?

Fan*_*Lin 1 schema mongodb

我有一个聊天室系统,我想使用MongoDB作为后端数据库.以下是实体:

  • 房间 - 聊天室(room_id)
  • 用户 - 聊天室中的聊天用户(room_id,user_name)
  • 消息 - 聊天室中的消息(room_id,user_name,message)

为了设计模式,我有一些想法:首先,3个集合 - 房间,用户和消息 - 并且在用户和消息文档中有一个父引用.

另一个想法是为每个房间创建集合.如

  • db.chatroom.victor
    • db.chatroom.victor.users
    • db.chatroom.victor.msgs
  • db.chatroom.john
    • db.chatroom.john.users
    • db.chatroom.john.msgs
  • db.chatroom.tom
    • db.chatroom.tom.users
    • db.chatroom.tom.msgs

...

我想如果我可以将文档划分为不同的集合,那么查询会更有效.此外,我可以使用上限集合来限制每个房间中的消息数量.但是,我不熟悉MongoDB.我不确定这样做是否有任何副作用,或者是否存在创建大量集合的性能问题?是否有设计MongoDB架构的指南?

谢谢.

key*_*one 5

你应该总是通过回答2个问题来设计你的架构:

  • 我应该存储哪些数据?(临时/永久地)
  • 我将如何访问该数据?(很多关于此的读取,很多关于此的写法,随机的rw在这里)

您不希望将高访问率数据嵌入到文档中(例如每隔一秒左右由每个用户访问的聊天消息),最好将其作为单独的集合.

另一方面 - 聊天室中的用户集合很少变化 - 你绝对可以嵌入.

只是设计使用常识,你会没事的