【问题标题】:Multiple bulk inserts in MongoDB - PerformanceMongoDB 中的多个批量插入 - 性能
【发布时间】:2016-05-30 09:09:56
【问题描述】:

我了解常规插入和bulk inserts 之间的性能提升。

我的问题是,如何最好地执行多个批量操作,其中每个操作插入大量(最少 15000 条)记录。或者有没有更好的方法来做到这一点?

【问题讨论】:

    标签: java mongodb bulkinsert


    【解决方案1】:

    我不确定我是否很好地理解了具体问题,但总的来说我会按照以下方式进行:

    • 我会为要插入的最大行数定义一个设置
    • 我将定义一个设置,以设置在插入预定行之前允许通过的最长时间
    • 我将有一个线程,其中包含要插入的记录参数队列
    • 每当需要插入新行时,我都会将其添加到队列中
    • 每当队列增加一行,如果行数达到最大行数,我会发出批量插入并清空队列
    • 当队列初始化/清除时,我会将计时器设置为 0
    • 当经过的时间达到设置中定义的最大时间时,我将执行批量插入并清除队列

    【讨论】:

    • 您的方法本质上是顺序批量插入(一个接一个)。我的问题是针对来自不同应用部分的多个批量插入(不同的螺栓 - 风暴方式)。做 30 个批量插入,每个批量插入处理至少 15K 条记录的成本有多高?
    • @KavithaMadhavaraj,我的建议是使用单独的线程进行批量插入,因此您实际上可以一次运行一个。您也可以异步运行它。至于您评论中的问题,实际上这取决于您目前的情况。您如何收集数据、目标表有多少列、平均运行多少选择查询以及它们的复杂性是多少。您还需要避免服务器泛滥,最好等待一段时间而不是崩溃服务器......
    • 一次执行一个批量插入?这是有道理的。
    • @KavithaMadhavaraj,是的,基本上这是可取的。是否需要执行更多操作取决于您的情况(例如每分钟获得数十万条数据),但如果您接近这种理想情况,那么您就在正确的轨道上。
    • MongoDB 驱动程序会将 15k 操作的批次拆分为更小的大小。我认为默认大小是 1000 次操作。因此,批量 15k 不会给您带来任何性能提升,而是有点拖累。见docs.mongodb.com/manual/reference/method/Bulk
    猜你喜欢
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-06
    • 2012-04-02
    • 2011-02-28
    • 2014-09-17
    相关资源
    最近更新 更多