Ленивая загрузка полей из БД с Mongoid или обработка больших документов - PullRequest
2 голосов
/ 17 января 2012

Мы разработали нашу базу данных Mongo так, чтобы она была сильно денормализована, в результате чего многие документы в наших коллекциях содержали очень большие массивы, такие как некоторые поля.Естественно, это может привести к загрузке из нашей БД дольше, чем необходимо, потому что документы просто очень большие.

Всякий раз, когда нам нужно получить некоторые записи из БД, я уменьшал последствия для производительности с помощью .only.выбрать только те поля, которые я хочу, но это требует от меня загрузки этих дополнительных данных до того, как они могут мне понадобиться, и, в общем, мне гораздо важнее отслеживать, какие поля в итоге нужны, когда я запрашиваю документ(s).

Есть ли у Mongoid способ, с помощью которого я могу просто определить определенные поля в моей модели как поля, которые должны загружаться лениво, чтобы я мог получить их с сервера как раз при первом обращении к ним?Я просмотрел документацию Mongoid, чтобы узнать, есть ли в ней что-то встроенное, но я не вижу ничего подобного.Возможно, есть сторонний гем, который добавляет эту функциональность в Mongoid?

1 Ответ

2 голосов
/ 18 января 2012

Mongoid не поддерживает отложенную загрузку данных с сервера, и не знает ни о каких плагинах для этого.

Хотя технически вы можете добавить это в Mongoid, вам все равно лучше вручную указать only, чтобы вы загружали то, что вам нужно один раз. Если вы лениво загрузили поля, основанные на использовании, вам придется извлекать данные из MongoDB каждый раз, когда к полю обращаются, пока nil.

То есть, если вы получили доступ к 5 различным полям поверх исходной загрузки документа, вы отправляете 6 запросов в MongoDB, что включает в себя общую обработку туда и обратно по сравнению с простым указанием его в only. *

...