带有mongoDB的多房间聊天数据库(猫鼬)

时间:2014-10-25 20:18:45

标签: mongodb mongoose

我需要为多房间聊天设置一个方案,使用mongodb进行存储。我目前正在使用 mongoose v2 ,我已经考虑过以下方法:

方法1

  • 每个聊天记录(每个房间)都有自己的mongo 集合
  • 每个聊天记录集合都由文档(架构) 消息 填充,包含from,to,message和time。
  • 用户集合
  • 用户集合由文档(架构) 用户 (包含有关用户的信息)填充
  • 怀疑:

1 我究竟如何从特定集合(聊天室)中检索文档?

方法2

  • 有一个集合( chat_logs
  • 收集chat_logs是弹出的。通过文件(架构) 消息 与来自(聊天室),用户等...
  • 如上所述,有用户集合。
  • 疑惑:

1 收藏品是否有最大尺寸?

欢迎任何建议......谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

没有充分的理由在每个聊天室中单独收集。集合的大小是无限的,MongoDB无法从多个集合中查询数据。因此,当您在多个馆藏中分发数据时,您将无法在多个聊天室中分析数据。

答案 1 :(得分:0)

正常收藏没有限制。但是,你真的想永远保存在任何聊天中写的每个字吗?很可能不是。您想保存写入最后1000或10000条消息。甚至100.000。让它成为1.000.000。考虑到聊天消息的平均大小,这不应超过20MB。因此,让它真正安全,并乘以10。

我要做的是为每个聊天室使用capped collection并使用tailable cursors。你不需要害怕太多的联系。平均mongo服务器可能需要几百个。这些查询可以很容易地成为shown in the Mongoose docs

这种方法有一些优点:

  1. 上限集合 - 它们基本上是BSON数据的fifo缓冲区。
  2. 数据以完全免费的插入顺序返回 - 没有排序,没有复杂的查询,没有额外的索引
  3. 无需维护个别房间。只需在创作上设置一个上限,mongodb将负责其余部分。
  4. 至于如何操作:只需在每个聊天室中创建一个连接,将它们保存在关联数组中的应用程序级别,并将聊天室作为键名。使用连接为每个请求创建新的tailable游标。使用XHR请求聊天数据。作为流响应。相应地处理。