2017-03-15 67 views
0

目前我有的1E10坐标在numpy的阵列的阵列,在格式是这样的:如何有效插入十亿数据的进入的mongodb

[[-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++以获得更好的性能吗?

非常感谢。

+0

看看这个选项https://www.khalidalnajjar.com/insert-200-million-rows-into-mongodb-in-minutes/ – putonspectacles

+0

创建批次,例如一次创建100个点。 Mongo可以做批量插入。你会节省很多时间。 https://docs.mongodb.com/manual/reference/method/Bulk.insert/和http://api.mongodb.com/python/current/examples/bulk.html –

+0

批量插入批次,请尝试使用不同批次的批量 – reptilicus

回答

0

非常感谢您的帮助,而我的insersion性能已经提高了很多! (从3.5小时到20分钟) 每this Pymongo document, 首先我试过insert_many([point for point in point])。它在1e6点上效率很高,但是在代码137或9(内存超出)下退出1e8点。 然后我试着自定义批量大小为1e7,并继续使用insert_many,但性能没有提高(不能说出原因)。 最后,无序批量写入同一个文件保存了我的生活,并且它可以在30分钟内处理至少1e8点,但没有出错。