【问题标题】:Multi room chat database with mongoDB (mongoose)使用 mongoDB (mongoose) 的多房间聊天数据库
【发布时间】:2014-12-21 09:48:07
【问题描述】:

我需要为使用 mongodb 进行存储的多房间聊天设置方案。我目前正在使用 mongoose v2,我想到了以下方法:

方法一

  • 每个聊天记录(每个房间)都有自己的 mongo 集合
  • 每个聊天日志集合都由文档(架构)message 填充,其中包含 from、to、message 和 time。
  • 用户收藏
  • 用户集合由文档(模式)用户(包含有关用户的信息)填充
  • 疑问:

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

方法二

  • 有一个集合(chat_logs
  • chat_logs 集合已流行。通过文档(模式)消息与 from、to(聊天室)、用户等...
  • 上面有用户集合。
  • 疑问:

1集合有最大尺寸吗?

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

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      普通收藏没有限制。但是,您真的想永远保存在任何聊天中写过的每一个字吗?很可能不是。您想保存最后写的 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 将负责其余的工作。

      至于如何做到这一点:只需为每个聊天室创建一个连接,将它们保存在应用程序级别的关联数组中,并以聊天室作为键名。使用连接为每个请求创建一个新的可尾游标。使用 XHR 请求聊天数据。以流的形式响应。相应地处理。

      【讨论】:

      • 那么你是在告诉我应该为每个聊天日志使用一个集合吗? :)
      • 不是为了日志,而是为了处理聊天。至于日志,您可以在每个聊天室封顶集合上有一个可尾光标,并将新条目持久保存到专门的日志集合中,将聊天室添加为字段名称。当然,在记录时,您可以减小上限集合的大小。那时我会使用一个非常小的集合,可能是 2MB 之类的。
      猜你喜欢
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-27
      相关资源
      最近更新 更多