猿问

mgo 查询为大型数据集返回“EOF”

我想执行一个查询,从我的 MongoDB 服务器返回一些数据,但是当数据量变大时,我从 c.Find().All() 查询中收到“EOF”错误。


基本上我有:


activeData := []DataEntry{}

activeDataQuery := bson.M{"data.active": true}

err := sigdb.Find(activeDataQuery).All(&activeData)

这对于包含大约 50,000 个项目的小型测试来说效果很好,但是当我尝试我的完整数据集(超过 100 万个项目)时,它返回“EOF”,即使那里有数据要查询。


什么可能导致这种情况?我正在使用 Go 1.3 在运行 Ubuntu 14.04 的笔记本电脑上运行 Go 程序和 MongoDB 服务器。


编辑:经过进一步的试验,我还得到:“write tcp 127.0.0.1:27017: Broken pipe”来自同一个查询。


largeQ
浏览 266回答 1
1回答

SMILET

在所有的方法都将匹配的数据加载到内存中,这是一个非常糟糕的方式来处理大型数据集。幸运的是,您会在方法完成之前得到这样的超时,在最坏的情况下,机器会因内存不足而崩溃。在任何类型的非平凡数据集上,使用普通迭代代替,使用Iter和Next方法。
随时随地看视频慕课网APP

相关分类

Go
我要回答