蒙哥表演

Diy*_*yko 4 performance mongodb spring-data spring-mongo

我们的测试工具创建n个线程,并在每个线程内执行m次迭代。我们计算最小,平均和最大操作时间。因此,我们会不时看到mongo执行请求的速度非常慢-长达几秒钟。同样,每次首次操作最慢时,我们甚至有意将其从统计数据中排除,而avg和max之间的差异仍然很大。正常吗 我可以消除那些缓慢的操作吗?为什么mongo执行某些请求的速度如此之慢?

下面是我们同时运行插入/获取/删除/更新测试时的单操作模式和混合模式的结果。在混合模式下,thread = 1表示我们为每种测试类型创建了4个线程 Mongo性能测试

我们使用默认值-每个主机100个连接

资源

public void storeMt(MyTestObject myTestObject) {
    mongoTemplate.insert(myTestObject );
  }

  public MyTestObject getMt(long id) {
    MyTestObject result = mongoTemplate.findById(id, MyTestObject.class);
    return result;
  }


@Document
public class MyTestObject implements Serializable {

  private static final long serialVersionUID = 1L;
  @Id
  private long id;
//class contains 20+ fields
.......
Run Code Online (Sandbox Code Playgroud)

Kau*_*hal 5

我看不出为什么会发生这种情况。

  1. 这不是由于mongoDB,可能是由于Java进程。开始并在内存中加载(分配内存)相关变量需要花费一些时间。
  2. 使用MMS(MongoDB的监视工具)来查看数据库是否为瓶颈。您可以检查数据库锁,网络使用率,内存使用率。
  3. MongoDB获取当前版本的数据库级别的锁定。因此,如果您的查询命中相同的数据库(单个数据库的不同或相同集合),则可能会减慢操作速度。
  4. 另外,添加更多线程并不一定会提高性能。由于CPU,内存(RAM)等上的额外负载,它可能会降低性能。因此,我建议在频繁间隔后增加线程数,然后查看性能何时停止改善。

我敢肯定,如果您这样做,您将找出速度变慢的确切原因。

干杯!