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

複数のノードプロセスが繰り返し行うことを回避するにはどうすればよいですか?

    これを行う1つの方法は、各MongoDBドキュメントに一意の数値IDを割り当て、各node.jsワーカーに一意の数値識別子を割り当てることです。

    たとえば、NUM_WORKERSというenv変数を作成し、node.jsモジュールに次のように記述します。

    var NumWorkers = process.env.NUM_WORKERS || 1;
    

    次に、一意の連続したインスタンス番号ID(0からNumWorkers-1の範囲)を各ワーカーに割り当てる必要があります(たとえば、初期化時にnode.jsプロセスによって読み取られるコマンドラインパラメーターを介して)。 MyWorkerInstanceNumという変数に保存できます。

    MongoDBからドキュメントを選択するときは、次の関数を呼び出します(ドキュメントの一意のdocumentIdをパラメーターとして渡します):

    function isMine(documentId){
        //
        // Example: documentId=10
        //          NumWorkers= 4
        // (10 % 4) = 2
        // If MyWorkerInstanceNum is 2, return true, else return false.
        return ((documentId % NumWorkers) === MyWorkerInstanceNum);
    }
    

    isMine()がtrueを返した場合にのみ、実際にドキュメントを処理し続けます。したがって、複数のワーカーがドキュメントを「選択」できますが、実際に処理するのは1人のワーカーだけです。



    1. MongoDB2.2のコレクションごとに異なるデータベースを作成する

    2. Passport.jsとMongoose.jsは、ログイン時にユーザーに入力します-req.userの入力済みフィールドを失います

    3. MongoDB:Mapreduce:reduce->multipleはまだサポートされていません

    4. 注意:未定義のプロパティ:Wampサーバーの[パス]にあるMongoDB \ Driver \ Manager ::$ mydb