MongoDB / mongoid метод update_attributes медленный? - PullRequest
1 голос
/ 09 августа 2011

У меня есть код, где мне нужно обновить запись в моей базе данных mongoDB. Поэтому я сначала нахожу запись, а затем обновляю запись. Однако в записях хранится много текстовых данных, поэтому я не хочу получать весь документ, когда получаю его обратно; достаточно, чтобы я мог обновить его. Я думал, что если бы я использовал метод "only (...)" в mongoid, то это вернуло бы только этот атрибут. Эти запросы, похоже, выполняются очень медленно, поэтому я не был уверен, что они выполняют то, что, как я думал, они выполняют.

d = Document.only(:title).find(title) # using 'title' as key in mongoDB
d.update_attributes({ author: "author_name" })

Есть ли более быстрый способ выполнить этот желаемый запрос?

Ответы [ 2 ]

0 голосов
/ 10 августа 2011

MongoDB предлагает ряд высокооптимизированных операций модификатора. Обдумайте использование операции $set для установки только одного ключа без необходимости работать с остальной частью документа. Вы также можете выполнить обновление и запрос в одной операции. Собственный запрос MongoDB для обновления author всех записей с указанным title будет выглядеть следующим образом:

var title = "The Title"
db.documents.update( { title: title }, { $set: { author: "The Author" } } )

Надеюсь, вы сможете найти способ передать этот запрос через Mongoid. Если нет, вы можете перейти непосредственно к адаптеру Mongo для его запуска. Для получения дополнительной информации см. документы по операциям модификатора .

0 голосов
/ 10 августа 2011

Одна мысль, которая у меня возникла, заключается в том, что вы можете разбить коллекцию на две коллекции: одна, содержащая метаданные текста (имя, автор, yearPublished, numPages и т. Д.), И другая, имеющая внешний ключ (который может просто быть _id MongoDB) и сам текст. Затем вы можете изменить такие вещи, как имя автора, в меньшую коллекцию, которая, я считаю, будет работать быстрее ... Что-то для тестирования, я думаю. Тем не менее, я думаю, что ваши проблемы со скоростью связаны с размером записей. Я лично заметил значительную потерю производительности, переходя от простого набора тестовых данных без множества атрибутов к реальному набору данных со многими атрибутами на запись.

...