将聊天消息存储在 mongodb 集合中是个好主意吗?
Is a good idea to store chat messages in a mongodb collection?
我正在使用 node.js
、redis
、socket.io
和 mongodb
开发聊天应用程序。 MongoDB 排在最后,用于保留消息。
我的问题是最后一步的最佳方法是什么?
恐怕要收集所有类似
的消息
{
id,
from,
to,
datetime,
message
}
很快就会变得太大,而且阅读速度会变得很慢,您怎么看?
您是否已经使用过更好的方法?
在 MongoDB 中,您以稍后要阅读的格式存储数据。
如果您从数据库中读取的是在 'to' 字段上过滤并使用动态日期时间过滤器的消息列表,那么此架构非常适合。
不要忘记在您要查询的字段上添加索引,这样查询它们的速度就会相当快,即使超过数百万条记录也是如此。
例如,如果您始终显示一整天的完整历史记录,则可以将一天的所有消息存储在一个文档中。如果两种类型的查询都经常出现,您甚至可以将消息以两种格式存储。
如果存储是个问题,您还可以使用上限集合,它会自动删除消息,例如1岁以上
我认为数据库结构很好,就像你在问题中提到的那样。
您可以分配一些 unique id
用于每对之间的聊天,并将其保存在每条聊天记录中。当你想显示它时,根据它进行检索。
说12
是A和B聊天的唯一id,要显示A和B的聊天时要根据12
检索
所以你的数据库结构可以是这样的:-
{
id,
from,
to,
datetime,
message,
uid
}
请记住,如果您提供一些 limit
(比如一次 100 个)用于检索,您可以优化检索。如果用户滚动超过 100 个,则检索更多 100 个聊天记录。这将解决很多检索问题。
当使用 limit
时,基于 date created
检索并使用 sort
进行查找查询。
这里只是想一想,消息是纯文本还是您也可以共享图片和视频?
如果是后者,那么将一天的所有聊天记录存储在一个集合中可能行不通。
实际上,如果您允许分享图片和视频,那么您需要考虑。还有 16mb 文件限制。
我正在使用 node.js
、redis
、socket.io
和 mongodb
开发聊天应用程序。 MongoDB 排在最后,用于保留消息。
我的问题是最后一步的最佳方法是什么?
恐怕要收集所有类似
的消息{
id,
from,
to,
datetime,
message
}
很快就会变得太大,而且阅读速度会变得很慢,您怎么看?
您是否已经使用过更好的方法?
在 MongoDB 中,您以稍后要阅读的格式存储数据。
如果您从数据库中读取的是在 'to' 字段上过滤并使用动态日期时间过滤器的消息列表,那么此架构非常适合。
不要忘记在您要查询的字段上添加索引,这样查询它们的速度就会相当快,即使超过数百万条记录也是如此。
例如,如果您始终显示一整天的完整历史记录,则可以将一天的所有消息存储在一个文档中。如果两种类型的查询都经常出现,您甚至可以将消息以两种格式存储。
如果存储是个问题,您还可以使用上限集合,它会自动删除消息,例如1岁以上
我认为数据库结构很好,就像你在问题中提到的那样。
您可以分配一些 unique id
用于每对之间的聊天,并将其保存在每条聊天记录中。当你想显示它时,根据它进行检索。
说12
是A和B聊天的唯一id,要显示A和B的聊天时要根据12
检索
所以你的数据库结构可以是这样的:-
{
id,
from,
to,
datetime,
message,
uid
}
请记住,如果您提供一些 limit
(比如一次 100 个)用于检索,您可以优化检索。如果用户滚动超过 100 个,则检索更多 100 个聊天记录。这将解决很多检索问题。
当使用 limit
时,基于 date created
检索并使用 sort
进行查找查询。
这里只是想一想,消息是纯文本还是您也可以共享图片和视频?
如果是后者,那么将一天的所有聊天记录存储在一个集合中可能行不通。
实际上,如果您允许分享图片和视频,那么您需要考虑。还有 16mb 文件限制。