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

标签 mongodb schema

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

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

对于设计架构,我有一些想法:首先,3 个集合 - room、user 和 msgs - 并且 user 和 msg 文档中有一个父引用。

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

  • 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 模式的指南?

谢谢。

最佳答案

您应该始终通过回答两个问题来设计您的架构:

  • 我应该存储哪些数据? (临时/永久)
  • 我将如何访问该数据? (对此进行大量读取,对其进行大量写入,此处随机读写)

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

另一方面 - 聊天室中的用户集合很少发生变化 - 您绝对可以嵌入它。

只要使用常识进行设计就可以了

关于mongodb - 我应该如何构建 MongoDB 的数据模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6647157/

相关文章:

node.js - MongoClient Node 游标流和数据管道

javascript - 如何检索拆分的值并将它们放入单独的变量中

schema - 存储SNMP数据的数据库方案

xml - 模式元素和模式属性的用途是什么

基于 jquery 的 xml 编辑器,使用 xml 模式

javascript - 在 mongodb 中链接文档的语法

mongodb - 从Mongodb Golang中的对象获取查询的元素

mysql - Laravel Schema Builder 改变存储引擎

java - 我应该如何可视化我的代码结构?

node.js - 非索引字段上的索引重复键