sql >> データベース >  >> NoSQL >> MongoDB

確実にMongoDBに再接続する

    接続が失敗した後にmongonodejsドライバーが再接続する方法を制御する2つの接続オプションがあります

    • reconnectTries:#times(デフォルトは30回)の再接続を試みます
    • reconnectInterval:サーバーは再試行の間に#ミリ秒待機します(デフォルトは1000ミリ秒)

    mongoドライバードキュメントのリファレンス

    つまり、mongoはデフォルトで30回接続を試み続け、すべての再試行の前に1秒待機します。そのため、30秒後にエラーが発生し始めます。

    このサンプルのように、ニーズに基づいてこれら2つのパラメータを微調整する必要があります。

    var MongoClient = require('mongodb').MongoClient,
        f = require('util').format;
    
    MongoClient.connect('mongodb://localhost:27017/test', 
        {
            // retry to connect for 60 times
            reconnectTries: 60,
            // wait 1 second before retrying
            reconnectInterval: 1000
        },
    
        function(err, db) {
            var col = db.collection('t');
    
            setInterval(function() {
                col.insert({
                    a: 1
                }, function(err, r) {
                    console.log("insert")
                    console.log(err)
    
                    col.findOne({}, function(err, doc) {
                        console.log("findOne")
                        console.log(err)
                    });
                })
            }, 1000)
        });
    

    これにより、デフォルトの30回ではなく60回試行されます。つまり、60秒後に再接続の試行が停止すると、エラーが発生し始めます。

    補足:アプリ/リクエストが再接続期間の満了まで待機しないようにする場合は、オプションbufferMaxEntries: 0を渡す必要があります 。この代償として、短いネットワークの中断中にもリクエストが中止されます。



    1. redisでキーを作成する時間

    2. 2dジオインデックスを使用してMongooseスキーマの配列でオブジェクトを正しく定義する方法

    3. mongodb3.6の新しいURLを使用してgolangから接続する方法

    4. MongoDBを使用したMapReduceは、非常に低速です(同等のデータベースの場合、MySQLでは30時間対20分)