MongoDB GridFS эффективность запросов один-к-одному в Ruby - PullRequest
0 голосов
/ 18 ноября 2010

Я использую MongoDB с Sinatra для приложения для iPhone.

У меня есть коллекция users MongoDB и коллекция picture GridFS. У каждого пользователя есть одно изображение, поэтому изначально я просто установил ObjectId, чтобы изображение было таким же, как у соответствующего пользователя. Это позволило с учетом ObjectId пользователя получить изображение этого пользователя всего одним запросом . Затем я планировал сохранить хеш-код изображения MD5 в пользовательском объекте, чтобы iPhone мог загрузить изображение только в том случае, если хэш-код MD5 изменился. Это сработало бы, но мне пришлось изменить класс Grid Ruby, чтобы получить MD5

Но тогда Кайл Банкер предложил , чтобы я просто сохранил picture_id вместо MD5 в пользовательском объекте. Но, если я сделаю это, учитывая пользователя ObjectId, мне придется сначала запросить у пользователя picture_id, а затем запросить изображение (2 запроса). Есть ли способ в одном запросе получить картинку, заданную пользователем ObjectId? Читая по индексам GridFS , я думаю, что есть способ сохранить ObjectId пользователя в метаданных изображения, а затем установить индекс для этого поля. Таким образом, я мог бы сделать это в одном запросе. Если это правильно, как выглядит код для этого в Ruby?

Увы, я должен даже беспокоиться? Я мог бы так же легко использовать picture_id для запроса изображения, что я сейчас и сделаю, но было бы неплохо, с синтаксической точки зрения, иметь возможность запросить изображение (в одном индексированном / быстрый запрос) user_id. Что-то вроде графика API Facebook позволяет вам делать, например, http://graph.facebook.com/mattdipasquale/picture.

1 Ответ

1 голос
/ 18 ноября 2010

Конечно.Как вы предлагаете, просто сохраните user_id где-нибудь в объекте файла рисунка и создайте индекс для этого поля.

...