2010-10-18 3 views
3

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

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

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

 
user = { 
    _id  : MongoId(...), 
    name : 'User One', 
    email : '[email protected]', 
    company : 'Company', 
    ... 
} 

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

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

Или мне все равно заменить все редактируемые поля?

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

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

Спасибо.

ответ

3

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

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

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

Операция Множителя

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

...

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^