2016-09-07 3 views
0

(時々働く、時々ない)コマンドを実行する権限がありません - 次のようにセットアップは次のとおりです。MongoDBの+ノード:私は私のMongoDB環境での問題に直面しています

マイノードアプリがどのrestify APIを提供ユーザーの登録を処理します(ユーザーが自分のメールに基づいてコレクションに存在するかどうか調べ、そうでない場合は挿入します(注:insertはbcryptを使用してパスワードをハッシュするので、おそらく少し遅くなります)。それはrestifyとMongoose ORMを使用します。

2番目のベンチマークスクリプト(同じマシンで実行されているノードでも書かれています)は、HTTP PUTを使用してこのrestify APIにアクセスします。

私はベンチマークで(ランダムデータで)これらのリクエストの約20-30を開始しており、一部のAPIリクエストのみが新しいユーザーを正しく挿入します。その他の場合は、MongoDBは次のようなエラーを生成します。

は上の権限がありません... {見つける: "ユーザー"、フィルター:{メール: "[email protected]"}}コマンドを実行するために

に...コマンドを実行する権限がありません{挿入: "ユーザー"、ドキュメント:[{...}]は、注文した:偽、writeConcernを:{W:1}}いくつかの他のユーザーが取得

完全に細かく挿入された。特に、同時に少ないリクエスト数(1-5)で問題は発生しません。 Mongoはこれらの「低い」量の要求を処理できませんか?それは同じマシン上で実行されているので問題ですか?このプロジェクトのために私がMongoで作成したユーザーは、txns /秒で十分ですか?

敬具、 Zahlii

+0

モンゴについてはあまりよく分かりませんが、読み書きロックによってこれらのエラーが発生する可能性はありますか?たぶん、書き込みの失敗とロックのためのこの記事をチェックしてください:https://www.rainforestqa.com/blog/2012-11-05-mongodb-gotchas-and-how-to-avoid-them/ – HeadCode

+0

私もこの問題に直面しています。この問題の解決方法を教えていただけますか? –

答えて

0

それはモンゴはまだWiredTigerを「古い」のストレージエンジンを使用していなかったことが判明しました。クエリにはレコードの更新が含まれていたため、古いエンジンはコレクションベースのロックを実行しました。つまり、エラーは読み書きロックのみに基づいていました。

Iは、文書ベースのロックを行い、それ以来、データベースは、これらのエラーが発生することなく多くの並列要求を処理するWiredTigerに移行(時々重い負荷の下で、彼らが再び現れるが - これは、私は推測のNoSQLあるモンゴの一部である)

0

あなたは試すことができます。また

Db.authenticate(user, password, function(err, res) { 
    // callback 
}); 

see the sourceを。

関連する問題