我正在尝试使用ASP .NET为聊天应用创建一个web api,而我仍然坚持我应该存储所有已发送消息的方式。
在本教程中https://pusher.com/tutorials/chat-aspnet/作者将所有消息存储在一个数据库中。他们找到与此行的一个对话框相关的所有消息:
conversations = db.Conversations.Where(c => (c.receiver_id == currentUser.id
&& c.sender_id == contact) ||
(c.receiver_id == contact
&& c.sender_id == currentUser.id))
.OrderBy(c => c.created_at).ToList();
我发现这种方法太慢了。我做了一些计算,发现如果你有100个活跃用户每个发送大约30条消息,一年就会有100万条消息。每次循环一百万行会使应用程序像糖蜜一样慢。
我仍然觉得使用Entity Framework与DB一起使用很方便。
那么存储像消息这样的数据数组的正确方法是什么?它应该是每个对话的单独数据库吗?如果是,是否有任何方法可以使用Entity Framework自动创建它们?或者可能有更好的解决方案?
提前致谢
P.S。我想创建一个ASP .NET核心应用程序,如果它有任何区别
答案 0 :(得分:1)
一百万条记录是花生。为什么你认为这会太慢?正如trailmax所说:关键数据库获取所需记录应该是微不足道的,因为你的索引和键是最好的。
忽略以下内容。我没有正确思考 如果你真的想成为负责在服务器端之间存储对话的人,你还应该考虑什么。