为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
largeQ 2021-09-20 10:53:32
我想执行一个查询,从我的 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”来自同一个查询。
查看完整描述

1 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

所有的方法都将匹配的数据加载到内存中,这是一个非常糟糕的方式来处理大型数据集。幸运的是,您会在方法完成之前得到这样的超时,在最坏的情况下,机器会因内存不足而崩溃。

在任何类型的非平凡数据集上,使用普通迭代代替,使用IterNext方法。


查看完整回答
反对 回复 2021-09-20
  • 1 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信