0

mongo 1.8.0 を使用して mongo 書き込みロックをシミュレートしようとしていますが、期待される正しい結果が表示されません。

同じサーバー上の 2 つの異なるデータベースに 2 つの mongo コレクションを作成します。DBObject の配列を作成し、両方のコレクションに挿入します。バッチ挿入は、2 つのスレッドを使用して同時にトリガーされます。また、DBCollection.insert(DBObject arr, WriteConcern.SAFE) が呼び出される前後の時間を追跡します。

さまざまなオブジェクト サイズと配列サイズを使用しているにもかかわらず、両方の DB に挿入するのにかかる時間は、やや近いことがわかります。1 つのスレッドが最初に書き込み、もう 1 つのスレッドをブロックするため、両方のスレッド間で所要時間が大幅に異なることが予想されます。ここに欠けているものはありますか?

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));

}
4

1 に答える 1

2

fsync & lockを使用して「書き込みロック」をシミュレートしてみませんか?

「書き込みロック」をシミュレートするのは難しいでしょう。それは本質的にぶらぶらしていないからです。わずかな時間しか存在しません。バージョン (1.8、2.0、および 2.2) 全体で多くの変更がありましたが、ここで概要を説明します(重複しないように)。

これは、「書き込みロック」で同様のテストを行っている他の誰かに関する本当に素晴らしいブログ投稿です。

于 2012-08-23T14:45:41.163 に答える