Python 如何高效地将数十亿数据插入mongodb
目前,我在numpy数组中有一个1e10坐标数组,格式如下: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(
[[-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可以进行批量插入。你会节省很多时间。和批量插入批次,尝试使用不同的批次大小