java - 模拟Mongo Write Lock来衡量性能

标签 java multithreading performance mongodb mongo-java

我尝试使用 mongo 1.8.0 模拟 mongo 写锁,但无法看到正确的预期结果。

我在同一服务器上的两个不同数据库中创建两个 mongo 集合。我创建了一个 DBObject 数组并将它们插入到两个集合中。使用两个线程同时触发批量插入。我还跟踪调用 DBCollection.insert(DBObject arr, WriteConcern.SAFE) 之前和之后的时间。

尽管使用不同的对象大小和数组大小,我总是发现插入两个数据库所需的时间有些接近。我希望一个线程首先写入阻塞另一个线程,导致两个线程之间所花费的时间显着不同。我在这里缺少什么吗?

class BenchTest {

public static void main() {

    Mongo m = new Mongo(host,port);
    DBCollection coll1 = m.getDB("db0").getColl("coll0");
    DBCollection coll2 = m.getDB("db1").getColl("coll0");

    Thread t1 = new WriteThread();
    t1.setCollection(coll1);
    Thread t2 = new WriteThread();
    t2.setCollection(coll2);

    t1.run();
    t2.run();

}

}


   class WriteThread extends Thread {

    DBCollection coll; 

    public void setCollection (DBCollection coll) {
        this.coll = coll;
    }

    long startTime = System.currentTimeMillis();
    coll.insert( (DBObject1, DBObject2, …, DBObjectn), WriteConcern.SAFE);
    long endTime = System.currentTimeMillis();

    System.out.println ("Time taken = "+(endTime-startTime));

}

最佳答案

为什么不直接使用 fsync & lock模拟“写锁”?

模拟“写锁”会很困难,因为它本质上不会挂起,只会存在很短的时间。跨版本(1.8、2.0 和 2.2)有许多变化,概述 here (以免重复自己)。

这是一个非常好的blog post其他人对“写锁”进行一些类似的测试。

关于java - 模拟Mongo Write Lock来衡量性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12082911/

相关文章:

java - 如何创建 AES 加密的 PKCS #8 文件?

java - 原始类型导致的代码重复 : How to avoid insanity?

java - java中线程的可变传输值

asp.net - IIS 7 工作进程瓶颈,应用程序池 ASP.NET 3.5 + 2.0 下大量等待请求

scala - Spark 中的性能调整

java - 模拟加权随机数 - Java

JAVA 无法在 main from 方法中访问我的数组

java - 如何分析哪些方法/资源在 Java 中持有线程?

java - 如何同时运行两个Selenium Chrome Driver实例?

linux - 为什么我的 linux 熵有这么低的上限?