3

そのため、PHPとMongoDBを使用して、読み取りと書き込みの両方でかなりのトラフィックが発生するアプリを構築しています。数か月後、1秒あたり約2500回の読み取り、1秒あたり200回の書き込みが発生するはずです(実際の方法はわかりません)。ただし、他と比較したトラフィックの観点からのレート)。

コレクションを更新するときに何をすべきかについて少し興味があります。ドキュメントの例は、特定のコレクションフィールドを更新するシェルを示していますが、コレクションの任意の数のフィールドが変更された場合に何が起こるかについては説明していません。

たとえば、ユーザーコレクションがあるとします(非常に単純化された例)。

ユーザー={
  _id:MongoId(...)、
  名前:'ユーザー1'、
  メール:'email@address.com'、
  会社:'会社'、
  ..。
}

編集可能なすべてのフィールドがフォームに表示されますが、ユーザーは自分のメールアドレスのみを変更します。

パフォーマンスの観点から厳密に言えば、元の値を非表示の入力に格納してPHPで比較し、更新に固有のクエリを作成するのが最善でしょうか?

または、とにかくすべての編集可能なフィールドを置き換える必要がありますか?

これは、オブジェクトと配列を相互に含むコレクションになります。ここに示す単純なものではありません。

最適化が後に続くことは知っていますが、MongoDBでも良い習慣を身に付けたいと思っています。

ありがとう。

4

1 に答える 1

3

編集可能なフォームを表示するために、おそらくオブジェクト全体を取得することになります。ここでは、現在の名前や電子メールなどを表示し、新しいバージョンを編集して送信できるようにすることを想定しています。つまり、オブジェクト全体を毎回アップロードして置き換えるのではなく、変更内容を確認して具体的に更新することができます。

最適化された更新操作「MongoDBUpdateing」を使用することをお勧めします。これにより、特定のフィールドを編集するたびにオブジェクト全体を置き換えるのではなく、より最適化されたインプレース操作を実行できます。おそらく、主に、、、$setおよび$addToSet(ネストされたオブジェクトを多数処理している場合は、$位置演算子)を参照します。

ドキュメントから:

修飾子の操作

修飾子の操作は非常に効率的で、既存の値を更新するときに役立ちます。たとえば、数値を増やすのに最適です。[そして他のもっと複雑なこと]

..。

モディファイアの更新には、オブジェクトのクエリと戻りに伴う遅延を回避できるという利点があります。モディファイアの更新は、操作のアトミック性とネットワークデータ転送がほとんどないことも特徴としています。

特定の操作の実装についてより具体的な質問がある場合は、質問してください。

于 2010-10-18T17:40:03.123 に答える