如何在MongoDB中异步插入日志?

3 投票
1 回答
2994 浏览
提问于 2025-04-17 16:13

我想在一个Django应用中使用PyMongo来记录日志。

我不太在乎日志表中的某些插入记录会丢失,所以我想把日志发送到另一台服务器上的MongoDB,并且在发送后继续执行,不用等确认。

我在看pymongo的文档,但我不太明白在一个集合中插入数据是否是阻塞的,也就是说插入操作是否会让程序停下来等结果。

我在考虑在Django模型的方法里实现这个功能。

from pymongo import MongoClient
conn = MongoClient('mongoserver', 27017)
db   = conn.main
col  = db.log
col.insert({"user": "Pedro", "action": "search", "Origin": "Katmandu"}, w=0)
conn.close()

我不知道这样的插入操作是否是异步的,以及连接是否应该关闭。

1 个回答

6

因为你给 insert 这个操作传了一个 w=0 的参数,所以这个操作是非阻塞的。也就是说,它会把要插入的文档放到一个队列里,然后就直接返回,不会等插入完成。

这样做的好处是可以保持连接一直打开,以获得更好的性能。

撰写回答