使用mongoDB(mongoose)的多房间聊天数据库
我需要为使用mongodb存储的多房间聊天设置一个方案。我目前正在使用猫鼬v2,我想到了以下方法: 方法1使用mongoDB(mongoose)的多房间聊天数据库,mongodb,mongoose,Mongodb,Mongoose,我需要为使用mongodb存储的多房间聊天设置一个方案。我目前正在使用猫鼬v2,我想到了以下方法: 方法1 每个聊天日志(每个聊天室)都有自己的mongo集合 每个聊天日志集合都由文档(模式)消息填充,其中包含发件人、收件人、消息和时间 有用户集合 用户集合由文档(架构)user填充(包含有关用户的信息) 怀疑: 1如何从特定的集合(聊天室)检索文档 方法2 有一个集合(聊天记录) 聊天记录的集合是pop。通过文档(模式)消息,以及从、到(聊天室)、用户等 有一个用户集合,如上所述 怀疑:
- 每个聊天日志(每个聊天室)都有自己的mongo集合
- 每个聊天日志集合都由文档(模式)消息填充,其中包含发件人、收件人、消息和时间
- 有用户集合
- 用户集合由文档(架构)user填充(包含有关用户的信息)
- 怀疑:
- 有一个集合(聊天记录)
- 聊天记录的集合是pop。通过文档(模式)消息,以及从、到(聊天室)、用户等
- 有一个用户集合,如上所述
- 怀疑:
欢迎任何建议。。。谢谢您的帮助。没有充分的理由在每个聊天室单独收集。集合的大小是无限的,MongoDB无法从多个集合中查询数据。因此,当您将数据分发到多个收集时,您将无法在多个聊天室中分析数据。正常收集没有限制。然而,你真的想永远保存聊天记录中的每一个单词吗?很可能不是。您希望保存最近写入的1000或10000条消息。甚至10万。让我们把它定为1.000.000。考虑到聊天信息的平均大小,它不应该超过20MB。让我们让它变得真正安全,然后乘以10 我要做的是使用每个聊天室和使用。你不必担心连接太多。平均每个mongo服务器可以使用几百个。查询可以很容易地进行裁剪 这种方法有一些优点:
至于如何做到这一点:只需为每个聊天室创建一个连接,将它们保存在应用程序级别的关联数组中,并将聊天室作为键名。使用连接为每个请求创建新的可定制游标。使用XHR请求聊天数据。以流的形式响应。相应地进行处理。那么你是在告诉我应该为每个聊天日志使用一个集合吗?:)不是为了日志,而是为了处理聊天。至于日志,您可以在每个聊天室封顶集合上都有一个可裁剪的光标,并将新条目持久化到专门的日志集合中,将聊天室作为字段名添加。当然,在记录日志时,您可以减小封顶集合的大小。我会使用一个非常小的集合,也许2MB或者其他什么。