【问题标题】:How to efficiently insert billions of data into mongodb如何高效地将数十亿数据插入到mongodb中
【发布时间】:2017-03-15 21:35:36
【问题描述】:

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

非常感谢。

【问题讨论】:

标签: python mongodb numpy gis geojson


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-21
    • 2011-11-17
    • 2016-04-15
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多