2016-08-04 36 views
0

私はmongodbを使ってデバイスログのデータを管理しています。現在、100万件を超える文書があります。ドキュメントには埋め込みフィールドと結合する30以上のフィールドが含まれています。今、新しい文書を挿入すると、実際には遅いです。インサートのコストは1000ms以上です。時間によってmongodbの挿入が遅い

[ 
    { 
     "v" : 1, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "xxx.LogDeviceReport" 
    }, 
    { 
     "v" : 1, 
     "key" : { 
      "time" : 1 
     }, 
     "name" : "time_1", 
     "ns" : "xxx.LogDeviceReport", 
     "expireAfterSeconds" : 604800, 
     "background" : true 
    } 
] 

のみ_idインデックスとTTLインデックス、ない任意の他のインデックス:

{ 
    "op" : "insert", 
    "ns" : "xxx.LogDeviceReport", 
    "query" : { 
     "_id" : ObjectId("xxxx"), 
     "deviceId" : ObjectId("xxxx"), 
     "en" : "xxxxxx", 
     "status" : 1, 
     'other fields, more than 30 fields...' 
     ... 
     ... 

    }, 
    "ninserted" : 1, 
    "keyUpdates" : 0, 
    "writeConflicts" : 0, 
    "numYield" : 0, 
    "locks" : { 
     "Global" : { 
      "acquireCount" : { 
       "w" : NumberLong(2) 
      } 
     }, 
     "MMAPV1Journal" : { 
      "acquireCount" : { 
       "w" : NumberLong(3) 
      } 
     }, 
     "Database" : { 
      "acquireCount" : { 
       "w" : NumberLong(2) 
      } 
     }, 
     "Collection" : { 
      "acquireCount" : { 
       "W" : NumberLong(1) 
      }, 
      "acquireWaitCount" : { 
       "W" : NumberLong(1) 
      }, 
      "timeAcquiringMicros" : { 
       "W" : NumberLong(1477481) 
      } 
     }, 
     "oplog" : { 
      "acquireCount" : { 
       "w" : NumberLong(1) 
      } 
     } 
    }, 
    "millis" : 977, 
    "execStats" : { 

    }, 
    "ts" : ISODate("2016-08-02T22:01:01.270Z"), 
    "client" : "xxx.xxx.xxxx", 
    "allUsers" : [ 
     { 
      "user" : "xxx", 
      "db" : "xxx" 
     } 
    ], 
    "user" : "[email protected]" 
} 

私はこのように、インデックスをチェックする:スロークエリOPSから、私はこのようなログが取得します。

私は 'クエリ'が遅く動作すると思います。 mongodbのドキュメントでは、_idだけが一意であることが確認されますが、ログでは 'クエリ'のすべてのフィールドが重要ですか?

この理由がない場合、どうすれば遅くなりますか?誰も私を助けることができますか?

+0

30フィールドである::詳細は

注用のMongoDBのブログからこのlinkを確認してくださいは、非常に多くのように思えます。おそらく質問以外にも、テーブルを追加してテーブル間の情報を減らすべきでしょう。 – Carcigenicate

+0

コレクションにはいくつのインデックスがありますか?使用可能なRAMとの相対的なインデックスの大きさはどれくらいですか?各インデックスは、挿入操作ごとに更新する必要があります。インデックスの数が多いと、コレクションの各インサートの費用が増加します。 –

+0

...アダムの質問の補遺として、これらのインデックスのどれだけが一意であると宣言されていますか? – mtj

答えて

1

あなたはあなたのケースで使用されているMMAPV1よりもストレージエンジンとしてWiredTigerを使用して検討することができ3+のMongoDBを使用している場合。

私は個人的には最大156000文書を1度に挿入したときに400回まで改善を見ました。

MMAPV1は約40分かかりました。私がWiredTigerに切り替えたとき、同じタスクが10分で完了しました。

これだけのMongoDB 3.0 +から

+0

私は見てみましょう、ありがとう! – hudao

+0

私が送ったリンクは7倍から10倍の範囲で向上しましたが、改善は改善です – rajadilipkolli

+0

切り替えを試みましたか?運が良ければ? – rajadilipkolli

関連する問題