【问题标题】:What is the best way to measure inserts per second in MongoDB?在 MongoDB 中测量每秒插入次数的最佳方法是什么?
【发布时间】:2013-07-12 15:42:25
【问题描述】:

我有一个多线程(使用线程池)C# 程序,它从包含日志的文本文件中读取数据并将它们批量插入到 MongoDB 集合中。我想要一种一致且精确的方法来测量将整个文件插入到集合中需要多长时间。

我不能真正调用 thread.join(因为它是一个线程池),我不能使用秒表,因为它们在不同的线程上运行。

接下来最好的事情是什么?

我目前的做法是智能手机上的计时器。我反复调用db.collection.stats(),等到计数与文件中的日志数相同...

【问题讨论】:

    标签: c# performance mongodb insert


    【解决方案1】:

    如果您使用的是 C# 4.0+,我建议您使用 CountdownEvent 类。使用该类,您可以创建一个实例,例如作为计数器的日志数量:

    var countdown = new CountdownEvent(numberOfLogs);
    

    然后,每次完成对 MongoDB 的写入时,都会从工作线程发出信号:

    countdown.Signal(); // decrement counter
    

    然后,在您的主进程(或另一个线程)中:

    countdown.Wait(); // returns when the count is zero
    // All writes complete
    

    【讨论】:

      【解决方案2】:

      使用mongostat(命令行工具),您可以准确地看到 MongoDB 服务器中发生的事情。它会每秒为您提供插入/查询等。插入完成后它不会自动停止,但它肯定会让您深入了解性能。完成导入后,“插入”将降至 0。

      【讨论】:

      • 我不知道为什么会这样,但是当我开始插入时,mongostat 停止定期向我提供有关数据库中发生的情况的报告。你知道为什么会这样吗?例如,在整个插入过程中,它只给了我 3 份报告。刀片为 35000、23000 和 75000...
      • 您是否同时构建索引?我发现它在构建索引时确实变慢了。
      • 观看mongostat 仍然需要手机的计时器。 :)
      • 不确定,但 mongostat 不会说谎 :-) 这可能是磁盘争用,或者驱动程序缓冲了一些东西......当然,除非这三个报告每隔一秒发生一次。在这种情况下,您的写入性能非常好!但它应该继续显示“0”以获取更多插入值。
      • 我很高兴看到 mongostat 每秒都有输出,告诉它确保索引,然后 mongostat 立即停止显示任何输出,直到大约 4 小时后建立索引。我确定这是高磁盘争用,但感觉 mongostat 仍应获得其统计信息。
      猜你喜欢
      • 1970-01-01
      • 2012-05-08
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-10
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多