Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mongoDB(mongoose)的多房间聊天数据库_Mongodb_Mongoose - Fatal编程技术网

使用mongoDB(mongoose)的多房间聊天数据库

使用mongoDB(mongoose)的多房间聊天数据库,mongodb,mongoose,Mongodb,Mongoose,我需要为使用mongodb存储的多房间聊天设置一个方案。我目前正在使用猫鼬v2,我想到了以下方法: 方法1 每个聊天日志(每个聊天室)都有自己的mongo集合 每个聊天日志集合都由文档(模式)消息填充,其中包含发件人、收件人、消息和时间 有用户集合 用户集合由文档(架构)user填充(包含有关用户的信息) 怀疑: 1如何从特定的集合(聊天室)检索文档 方法2 有一个集合(聊天记录) 聊天记录的集合是pop。通过文档(模式)消息,以及从、到(聊天室)、用户等 有一个用户集合,如上所述 怀疑:

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

方法1

  • 每个聊天日志(每个聊天室)都有自己的mongo集合
  • 每个聊天日志集合都由文档(模式)消息填充,其中包含发件人、收件人、消息和时间
  • 用户集合
  • 用户集合由文档(架构)user填充(包含有关用户的信息)
  • 怀疑:
1如何从特定的集合(聊天室)检索文档

方法2

  • 有一个集合(聊天记录
  • 聊天记录的集合是pop。通过文档(模式)消息,以及从、(聊天室)、用户等
  • 有一个用户集合,如上所述
  • 怀疑:
1收藏是否有最大尺寸


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

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

正常收集没有限制。然而,你真的想永远保存聊天记录中的每一个单词吗?很可能不是。您希望保存最近写入的1000或10000条消息。甚至10万。让我们把它定为1.000.000。考虑到聊天信息的平均大小,它不应该超过20MB。让我们让它变得真正安全,然后乘以10

我要做的是使用每个聊天室和使用。你不必担心连接太多。平均每个mongo服务器可以使用几百个。查询可以很容易地进行裁剪

这种方法有一些优点:

  • 封顶集合速度很快-它们基本上是BSON数据的fifo缓冲区
  • 数据完全按照插入顺序返回,无需排序,无需复杂查询,无需额外索引
  • 没有必要维护各个房间。只需对创建设置一个上限,mongodb就会处理其余的事务

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

    那么你是在告诉我应该为每个聊天日志使用一个集合吗?:)不是为了日志,而是为了处理聊天。至于日志,您可以在每个聊天室封顶集合上都有一个可裁剪的光标,并将新条目持久化到专门的日志集合中,将聊天室作为字段名添加。当然,在记录日志时,您可以减小封顶集合的大小。我会使用一个非常小的集合,也许2MB或者其他什么。