在mongodb集合中存储聊天消息是个好主意吗?

时间:2016-08-04 11:10:47

标签: mongodb database-design chat bigdata

我正在与node.jsredissocket.iomongodb开发聊天应用。 MongoDB是最后一个,用于持久化消息。

我的问题是最后一步的最佳方法是什么?

我害怕收藏所有信息,例如

{
    id,
    from,
    to,
    datetime,
    message
}

太快会变得太大,读起来会变得很慢,你怎么看?

你有没有更好的方法?

3 个答案:

答案 0 :(得分:8)

在MongoDB中,您将以稍后要阅读的格式存储数据。

如果您从数据库中读取的内容是在“到”字段和动态日期时间过滤器上过滤的消息列表,那么此模式非常适合。

不要忘记在您要查询的字段上添加索引,然后查询它们是合理的,甚至超过数百万条记录。

例如,如果您要显示一整天的完整历史记录,则可以将一天中的所有消息存储在一个文档中。如果两种类型的查询都发生很多,您甚至可以以两种格式存储邮件。

如果存储存在问题,您还可以使用上限集合,该集合会自动删除例如超过1岁。

答案 1 :(得分:2)

我认为db结构很好,就像你在问题中提到的那样。

您可以为每对之间的聊天分配一些unique id,并将其保留在每个聊天记录中。当您想要显示它时,根据它进行检索。

12是A和B之间聊天的唯一ID,当您想要显示A和B的聊天时,检索应该基于12

所以你的数据库结构可以是: -

{
    id,
    from,
    to,
    datetime,
    message,
    uid
}

请记住,如果您要提供一些limit(例如每次100个)进行检索,则可以优化检索。如果用户滚动超过100,则检索更多100个聊天。这将解决大量的检索。

使用limit时,请根据date created进行检索,并使用sort查找查询。

答案 2 :(得分:0)

这里只是一个想法,是纯文本消息还是允许您共享图像和视频?

如果是后者,那么将一天中的所有聊天记录存储在一个集合中可能无法解决。

实际上,如果您允许图像和视频共享,那么您需要考虑到。 16mb文件限制。

相关问题