Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何高效地将数十亿数据插入mongodb_Python_Mongodb_Numpy_Gis_Geojson - Fatal编程技术网

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

Python 如何高效地将数十亿数据插入mongodb,python,mongodb,numpy,gis,geojson,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] ...... ] for point in points: db.map.insert_one(

目前,我在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]
......
]
for point in points:
    db.map.insert_one(
    {
        "loc": 
        {
            "x": np.float64(point[0]),
            "y": np.float64(point[1]),    
        }          
        "z": np.float64(point[2])
    }
)
每行是一个点的坐标(x,y,z)。 我希望将它们插入mongodb数据库(GeoJSON)。 我目前的做法是:

[[-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]
......
]
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分钟) 每, 首先,我尝试插入许多([点对点插入点])。它在1e6点上有效,但在1e8点上以代码137或9(内存超出)退出。 然后我尝试将批量大小自定义为1e7,并继续使用insert\u many,但性能没有提高(无法说明原因)。
最后,在同一个文档中无序的批量写入挽救了我的生命,它可以在30分钟内处理至少1e8个点而不会出错

查看此选项以获得创建批次的选项,例如一次创建100个点。Mongo可以进行批量插入。你会节省很多时间。和批量插入批次,尝试使用不同的批次大小