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



目前我在 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++以获得更好的性能吗?

谢谢。

非常感谢你对我的帮助,我的坚持表现提高了很多!(从3.5小时到20分钟(根据这份Pymongo文件,首先我尝试了insert_many([点对点](。它在 1e6 点上有效,但它以代码 137 或 9(超过内存(退出 1e8 点。然后我尝试将批量大小自定义为 1e7 并继续使用 insert_many,但性能没有提高(无法说明原因(。最后,同一文档中的无序批量写入挽救了我的命,它可以在 1 分钟内处理至少 30e8 点而不会出错。

最新更新