我正在开发一个Django中间件来将所有的请求/响应存储在我的主数据库中(Postgres / SQLite)。但是不难猜到开销会很大,所以我想用Redis把请求排队一段时间,然后慢慢地把它们发送到我的数据库。例如,接收100个请求,把它们存储在数据库中,等待接收另外100个请求并执行相同的操作,或者类似的操作。
模型是这样的:
url
method
status
user
remote_ip
referer
user_agent
user_ip
metadata # any important piece of data related to request/response e.g. errors or ...
created_at
updated_at
我的问题是“这是一个好的方法吗?我们如何实施它?你有没有这样做的例子?”另一个问题是“有没有更好的解决方案”?
2条答案
按热度按时间tpgth1q71#
不幸的是,这并不特别适合具体的问题/答案格式。
“这是一个好的方法吗?”很难直接回答"是“或”否“。它会 * 工作 *,你提议的实现看起来很合理,但你将实现相当多的软件,并给你的项目增加相当多的复杂性。
如果没有只有你自己拥有的上下文,这是否可取并不容易回答。
有些事情你需要回答:
/favicon.ico
?它是否传达了他们所需要的含义和上下文?比较您的方法与其他方法的优缺点:
最重要的是:首先捕获您的实际需求,其次实现最简单的解决方案,只有在您实际看到性能问题之后才进行优化。
sxissh062#
我不会把这个功能放在我的Django应用程序中。有很多工具可以做到这一点。其中之一是NGINX,它是一个反向代理服务器,你可以把它放在Django的前面。然后你可以使用NGINX的access log。另外,你可以根据自己的需要使用format those logs。通常对于这么大的数据量,最好不要把它们存储在数据库中。因为这些数据很少被使用,您可以将它们存储在一个S3存储桶中,或者只存储在普通文件中,然后使用日志解析器工具来解析它们。