2016-07-12 14 views
0

私はMongoDBで初心者ですので、私の質問は簡単かもしれません...ユーザーに自分のアドレス帳をアップロードさせたいと思います。 追加することが効率的になります - ドキュメントは、私が 私の質問があるmongodbでインデックスを頻繁に更新するコレクションの効率性

{"contacts.phoneNumber":"+14129123456"} 

すなわち、相互の連絡先とuseresを見つけるために電話番号による検索を実行したいと考え、以下の構造

{ 
"_id" : "56f29ecc2a00001800dbdf54", 
"contacts" : [ 
    { 
     "name" : "John", 
     "phoneNumber" : [ 
      "+18144040000" 
     ] 
    }, 
    { 
     "name" : "Andrew ", 
     "phoneNumber" : [ 
      "+14129123456" 
     ] 
    } 
] 
} 

を持っていますユーザーが頻繁にあちこちに自分のアドレス帳を更新するという事実を考慮すると、このインデックス

db.addresses.createIndex({ "contacts.phoneNumber": 1 }, { unique: false }, {background: true}) 

現在のデータを上書きする、または新しいデータを挿入する電話機。このアップロードは、連絡先の配列がそれぞれ電話番号の配列を保持する単一のドキュメントです。 各アップロード/更新には数百/数千のレコードが含まれますか?

+0

あなたの非機能要件によって異なります。アップロードプロセスは、オンラインのプロセスまたはバッチプロセスと同期していますか?アップロードには1000件のドキュメントがあると述べていますか? – notionquest

+0

@notionquestそれを指摘してくれてありがとう、私はちょうどその点を精緻化する私の質問を編集しました。各ユーザーには1つの文書があります。 – igx

答えて

1

インデックスは意味があります。読み書きの間にトレードオフがあることを効率化する。典型的には、ユーザインタフェースは、あらゆる検索(すなわち、読み出し)に対して迅速に応答することが期待される。したがって、特定のフィールドにインデックスを作成することは避けられません。それに基づいて、「電話番号」の索引付けは、ユースケースで電話番号の検索や問合せを直接行う必要があることを考慮すると、うまくいきます。

ドキュメントのインデックスを作成すると、書き込みパフォーマンスが低下します。しかし、この特定のインデックスは、書き込み性能を大幅に低下させることはない。長い時間がかかる場合は、大規模なアップロードの典型的なUIデザインであるアップロードの進行状況バーを持つようにUIデザインを再考する必要があるかもしれませんが、

また、MongoDBで利用可能な書面問題のオプションについても確認できます。ドライブからの確認応答を期待しているかどうかにかかわらず、書込み問題を構成できます。

謝辞を書くことなく書き込みを行うことを検討すると、書き込みパフォーマンスが向上します。しかし、ほとんどのアプリケーションでは、書き込みが成功したことを確認するために書き込みに対する応答を期待しています。

https://docs.mongodb.com/manual/reference/write-concern/

+0

インデックスビルドにbackground = trueとマークされていますが、ありがとうございますが、書き込みパフォーマンスが低下しますか? – igx

+2

Background = true - 最初にインデックスを作成するとき、インデックス作成プロセスはバックグラウンドで実行され、データベース全体をブロックしません。アトミックな挿入/更新を行うと、インデックスはすぐに更新されます。 https://docs.mongodb.com/manual/core/index-creation/ – notionquest

+0

インデックスは単なる値ではありませんが、配列にはありますが、インデックスは正常ですか? – igx

関連する問題