mgo 和 mongodb 的 i/o 超时

Posted

技术标签:

【中文标题】mgo 和 mongodb 的 i/o 超时【英文标题】:i/o timeout with mgo and mongodb 【发布时间】:2014-08-30 09:56:42 【问题描述】:

我正在从 mgo 运行 map-reduce 作业。它运行在一个包含超过 350 万条记录的集合上。由于某些原因,我现在无法将其移植到聚合;可能会更晚。所以,map-reduce 是我所期待的。这项工作,当我从我为测试代码和输出而创建的原始 js 文件运行它时,运行良好。我尝试将 map 和 reduce 代码放在两个字符串中,然后尝试调用 mgo.MapReduce 为我执行 map-reduce,我将输出写入不同的集合中。它给了我

读取 tcp 127.0.0.1:27017: i/o 超时

不过,由于该作业已在后台触发,它仍在运行。现在根据这个线程在这里---http://grokbase.com/t/gg/mgo-users/1396d9wyk3/i-o-timeout-in-statistics-generation-upsert

通过调用 session.SetSocketTimeout 很容易解决,但我不想这样做,因为此 map-reduce 将运行的文档总数会有所不同,因此我相信时间会有所不同。所以,我永远无法以我相信的方式解决问题。

我还有哪些其他方法?

请帮帮我

【问题讨论】:

不是一个真正的答案,但你总是可以将超时设置为非常长的,看看它是否有效,例如:session.SetSocketTimeout(1 * time.Hour),同样出于好奇,你运行它需要多长时间来自 js 文件? 大约 10 分钟。我也想到了你告诉我的。但正如你提到的,这不是一个“正确”的解决方案。让我看看我能想出什么。 我真的不认为这个具体问题有合适的解决方案 我也这么认为!! :( 【参考方案1】:

将我的评论移至答案。

我认为解决此问题的唯一方法是将套接字超时设置为高得离谱的值,例如:

session.SetSocketTimeout(1 * time.Hour)

【讨论】:

对我不起作用。看到这个:github.com/globalsign/mgo/issues/21

以上是关于mgo 和 mongodb 的 i/o 超时的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 golang 和 mgo 库在 mongodb 中创建文本索引?

带有 mgo 驱动程序的 MongoDB 管理命令

Golang mongodb 从集合中删除所有项目 [mgo.v2]

使用 golang 和 mgo,如何在 MongoDB 中搜索一系列值?

用golang的mgo驱动,mongodb时区怎么设置,总是慢8小时

如何使用 Go 驱动程序或 mgo/qmgo 在 MongoDB 中存储地理空间数据?