我正在处理聊天应用程序,我需要你的帮助。 如果有人在数据库中在线,我会存储信息。现在我有一个功能,显示您的朋友列表以及聊天伙伴是否在线。问题是:如果有人上网,我想经常查看。到现在为止,我每秒都有一个SQL语句来检索数据并在客户端上显示它。问题:整个应用程序开始滞后并放慢速度(这是有道理的)。现在我需要你的帮助。我怎样才能改善这一点。我想到了不同的事情。首先,如果有人在线,我有想法每5分钟左右检查一次。但我不想等待5分钟,直到我看到正确的在线/离线列表。所以这个机会真的不可能。我的下一个想法是在更新表时(因为有人上线)只检索数据。我想到了一个触发器,但有可能编写一个触发器,它在更新时调用,但在我的C#代码中调用一个方法? 我真的不知道,我希望你能帮助我。
您对此类申请有何建议?
问候
答案 0 :(得分:3)
评论时间有点长。
您的结构根本无法扩展。事实上,只要您的架构有客户端程序轮询中央服务器,您应该考虑“这是一个潜在的可伸缩性问题”。如果他们每天下载昨天的结果一次,那可能没问题。每秒一次 - 您的服务器只是响应这些请求。
解决方案是当有人上线或离线时,让服务器联系相关客户。至少有两种方法可以做到这一点。 “内置到数据库”方法是有一个触发器。我不喜欢为此目的使用触发器,因为这种类型的逻辑可能会造成繁琐且难以找到的依赖关系。
相反,我更喜欢将诸如“立即登录用户”和“用户现在登出”等操作包装到存储过程中。此存储过程将更新相关表并通知相关客户该朋友可用。
当然,这意味着您的客户端必须能够处理来自服务器的异步消息。这是真正可扩展系统所需的功能之一。