Лучшие практики для обновления коллекции MongoDB с неизвестными измененными полями - PullRequest
3 голосов
/ 18 октября 2010

Итак, я создаю приложение с использованием PHP и MongoDB, которое будет иметь достаточный объем трафика как при чтении, так и при записи. Через пару месяцев должно быть около 2500 операций чтения в секунду и 200 операций записи в секунду (не уверенхотя это действительно оценивает с точки зрения трафика по сравнению с другими). ​​

Мне немного любопытно, что делать при обновлении коллекции;примеры документации показывают, что оболочка обновляет определенное поле коллекции, но не объясняет, что происходит, когда любое количество полей из коллекции могло быть изменено.

Например, скажем, у меня есть пользовательская коллекция (очень упрощенный пример):

user = {
  _id     :  MongoId(...),
  name    : 'User One',
  email   : 'email@address.com',
  company : 'Company',
  ...
}

Мы показываем все редактируемые поля в форме, но пользователь только меняет свой адрес электронной почты.

Строго говоря, с точки зрения производительности, было бы лучше сохранить исходные значения в скрытых входах, чтобы сравнить их в PHP, а затем создать запрос, специфичный для обновления?

Или я должен заменить всев любом случае редактируемых полей?

Это будет коллекция, содержащая объекты и массивы друг в друге, а не простая, показанная здесь.

Я знаю, что оптимизация наступит позже, но я также ищуприобрести хорошие привычки и с MongoDB.

Спасибо.

1 Ответ

3 голосов
/ 18 октября 2010

Вы, вероятно, получите весь объект, чтобы отобразить редактируемую форму - я предполагаю, что здесь вы будете отображать текущее имя, адрес электронной почты и т. Д. И позволять им редактировать и отправлять новые версии.Это означает, что вы можете проверить, что изменилось и обновить это, а не загружать и заменять весь объект каждый раз.

Я бы предложил использовать оптимизированные операции обновления: "MongoDB Updating" .Таким образом, вы можете выполнять более оптимизированные операции на месте, а не заменять весь объект каждый раз, когда хотите отредактировать определенное поле.Вы, вероятно, будете смотреть в основном на $set, $addToSet и (если вы имеете дело с большим количеством вложенных объектов, позиционный оператор $.

Из документов:

Операции модификатора

Операции модификатора высокоэффективны и полезны при обновлении существующих значений, например, они хороши для увеличения числа. [ Идругие более сложные вещи ]

...

обновление модификатора имеет преимущества в том, что позволяет избежать задержки, связанной с запросом и возвратом объекта. Обновление модификатора также имеет атомарность операции и оченьнебольшая передача данных по сети.

Если у вас есть более конкретные вопросы по реализации конкретной операции, просто спросите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...