R01*_*010 4 database-design chat bigdata mongodb
我正在开发一个聊天应用node.js,redis,socket.io和mongodb.MongoDB是最后一个,用于持久化消息.
我的问题是最后一步的最佳方法是什么?
我害怕收集包含所有信息的集合
{
id,
from,
to,
datetime,
message
}
Run Code Online (Sandbox Code Playgroud)
太快会变得太大,而且阅读目的会变得很慢,你怎么看?
你有没有更好的方法?
在MongoDB中,您将以稍后要阅读的格式存储数据.
如果您从数据库中读取的内容是在"到"字段和动态日期时间过滤器上过滤的消息列表,那么此模式非常适合.
不要忘记在要查询的字段上添加索引,然后查询它们是合理的,甚至超过数百万条记录.
例如,如果您要显示一整天的完整历史记录,则可以将一天中的所有消息存储在一个文档中.如果两种类型的查询都发生很多,您甚至会以两种格式存储邮件.
如果存储是个问题,您还可以使用上限集合,这将自动删除例如超过1年的消息.
我认为数据库结构很好,就像你在问题中提到的那样。
您可以分配一些unique id用于每对之间的聊天并将其保存在每个聊天记录中。当你想显示它时,根据它进行检索。
说12是 A 和 B 之间聊天的唯一 ID,检索应该基于12您想显示 A 和 B 的聊天的时间。
所以你的数据库结构可以是这样的:-
{
id,
from,
to,
datetime,
message,
uid
}
Run Code Online (Sandbox Code Playgroud)
请记住,您可以优化您的检索,如果您愿意提供一些limit(例如一次 100 个)进行检索。如果用户滚动超过 100 次,则检索更多 100 次聊天。这将解决大量检索。
使用时limit,检索也基于查找查询date created并sort与查找查询一起使用。