python - 如何在没有 map/reduce 的情况下转换大型 Mongodb 集合中的每个文档?

标签 python mongodb mapreduce

对于冗长的描述,我们深表歉意。

我想对一个大型 Mongodb 集合中的每个文档运行一个转换,其中包含 1000 万条记录,大约 10G。具体来说,我想对每个文档中的 ip 字段应用一个 geoip 转换,然后将结果记录附加到该文档,或者只是创建一个通过 say id 链接到该文档的其他记录(链接并不重要,我可以创建一个整个单独的记录)。然后我想按城市进行计数和分组 - (我确实知道如何做最后一部分)。

我认为我不能使用 map-reduce 的主要原因是我不能在我的 map 函数中调用 geoip 库(或者至少这是我认为存在的约束)。

所以我的核心问题是如何遍历集合中的每条记录并应用转换 - 使用最有效的方法来做到这一点。

通过 Limit/skip 进行批处理是不可能的,因为它会进行“表扫描”,并且会逐渐变慢。

有什么建议吗?

Python 或 Js 更受欢迎,因为我有这些 geoip 库,但欢迎使用其他语言的代码示例。

最佳答案

因为你必须遍历“每条记录”,你无论如何都要进行一次全表扫描,然后是一个简单的游标(find())+可能只获取几个字段(_id,ip ) 应该这样做。 python 驱动程序将在后台进行批处理,因此如果默认值不够好,您可以提示最佳批处理大小 (batch_size) 是多少。

如果您添加了一个新字段并且它不适合先前分配的空间,mongo 将不得不将其移动到另一个地方,因此您最好创建一个新文档。

关于python - 如何在没有 map/reduce 的情况下转换大型 Mongodb 集合中的每个文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663432/

相关文章:

python视频捕获循环

php - mongodb中按年龄组分组

java - 无法访问 MapReduce 的 reducer 类中的计数器

hadoop - 如何使用spark for map-reduce flow来选择文件夹下所有csv文件的N列,前M行?

java - 在MRUnit中测试特定异常

python - 我如何编写一个算法来计算同一组中两个 Sprite 的碰撞?

python - 如何将一列中最后一次更改的索引分配给每一行?

python - 制作条形图来表示 Pandas Series 中出现的次数

javascript - Meteor js - 无法通过控制台在Mongo上插入数据

mongodb - 使用身份验证机制在mongo容器中导入JSON文件