我遵循了下面描述的方法来实现一个简单的聊天应用程序:https://code.tutsplus.com/tutorials/how-to-create-a-simple-web-based-chat-application--net-5931
我正在写一个文件,并从文件中读取。
我想实现一个功能,当聊天不活跃时(当有一段时间没有人写东西时),它可以保存聊天历史记录。
要做到这一点,我会将文件与聊天消息一起读取,并将每条消息作为行插入数据库中。在完成对数据库的插入之后,我将删除该文件。
下次有人访问聊天时,将从数据库中获取历史记录。
当有人开始向聊天中写入新消息时,我会采用相同的方法:写入一个新文件,然后从该文件中读取。
但我想知道这里的表演。
如您所见,每2,5秒向读取文件并返回其内容的后端发出ajax请求。
我的问题是:这是一种有效的方法吗?每2,5秒从数据库而不是文件系统上读取一个文件会更有效吗?
发布于 2018-05-17 23:02:28
问题的效率部分不能用给定的上下文来回答,因为我们只知道客户端每2.5秒就会提出一个请求。在高层次上,我们不知道会有多少客户机同时使用应用程序,文件可以得到多大,使用的是什么类型的数据库,等等。我们也不知道什么对您来说很重要。只是磁盘IO?客户表现?网络?CPU?他们都是,但有些人比其他人更重?因此,文件vs数据库最好由您在预测的负载下测量每个方面的性能并监视对您最重要的方面来完成。
但是,我首先要问的问题是,‘这是一个有效的方法吗?如果您使用数据库来存储/读取消息,那么使用临时文件存储消息会带来什么好处?为什么不直接向数据库写入新消息呢?
如果没有该文件,当客户端轮询服务器以查找新消息时,他们可以传递其上一次检索消息的时间戳,或者传递其上一次检索的消息id,而数据库则可以检索在该日期或id之后发布的消息。您将不必返回客户已经拥有的信息。考虑到聊天非常活跃,并且文件没有机会写入数据库和清除。您也不必担心新的客户端连接、从数据库读取消息、触发读取到数据库的文件和在客户端2.5秒通过之前删除文件,现在客户端丢失了这些最新消息。
现在,如果chat非常活跃,并且文件没有“清除”,那么您将向客户端发送大量不必要的数据。这是否会导致实际性能的影响,您将需要确定,但至少这是不必要的数据,这将表明一个更大的设计问题。
https://softwareengineering.stackexchange.com/questions/371070
复制相似问题