如何有效地将数十亿数据插入mongodb

时间:2017-03-15 21:35:37

标签: python mongodb numpy gis geojson

目前我在numpy数组中有一个1e10坐标数组,格式如下:

[[-20.225869 1.1488514 47.007915]
[-19.585725 1.1527847 47.106827]
[-19.007616 1.0450604 41.686756]
[-19.277712 1.0455568 41.622501]
[-19.650136 1.0519722 41.848976]
......
]

每一行是一个点的坐标(x,y,z)。 我希望将它们插入到mongodb数据库(GeoJSON)中。 我目前的做法是这样的:

for point in points:
    db.map.insert_one(
    {
        "loc": 
        {
            "x": np.float64(point[0]),
            "y": np.float64(point[1]),    
        }          
        "z": np.float64(point[2])
    }
)

这个过程确实需要花费很多时间。 我想知道是否有一些有效的方法可以做到这一点?我应该转向C ++以获得更好的性能吗?

非常感谢你。

1 个答案:

答案 0 :(得分:0)

非常感谢你帮助我,我的破坏表现得到了很大改善! (从3.5小时到20分钟) 每this Pymongo document, 首先我尝试了insert_many([点数点])。它在1e6点有效,但它以1e8点的代码137或9(内存超过)退出。 然后我尝试将批量大小定制为1e7并继续使用insert_many,但性能没有提高(不能说明原因)。 最后,无序批量写入相同的文件节省了我的生命,并且它可以在30分钟内处理至少1e8点而没有错误。