使用go mongo驱动程序设置默认查询超时

时间:2020-06-22 13:38:51

标签: database mongodb go timeout

我目前正在使用MongoDB的Golang代码库上工作。令我困扰的是,每当进行查询时,都会创建一个新的 context.WithTimeout 。让我举个例子:

ctx, cancel := context.WithTimeout(ctx, defaultTimeout)
defer cancel()

collection := m.Client.Database(....
result := collection.FindOne(ctx, filter)

我尝试不使用上下文的一种方法是:

options.FindOne().SetMaxTime(defaultTimeout)

但是当我测试时,超时时间很小(例如1纳秒),没有导致超时吗?您有关于为什么它不起作用的想法吗?

还有,是否可以通过某种方式将此类超时设置为所有查询的全局选项?
交易呢?

1 个答案:

答案 0 :(得分:0)

$maxTimeMS我猜您正在尝试使用它限制服务器花在执行查询上的时间。文档中提到了中断点,即,根据查询的不同,服务器可能会占用更多的限制而不会中断。

上下文超时适用于客户端,它指定驱动程序等待服务器响应的时间。

这两个超时确实具有不同的目的。如果要中止长时间运行的查询,则应使用maxTimeMS(这还将释放服务器资源,否则即使客户端超时,服务器也将继续处理查询)。如果要防止网络故障,请使用客户端超时。

您可以在多个操作中重用上下文。实际上,这限制了所有操作加在一起的总时间。

要全局指定套接字超时,请使用socketTimeoutMS URI选项。