MongoDB, Carrierwave, GridFS и предотвращение дублирования файлов - PullRequest
0 голосов
/ 28 декабря 2010

Я имею дело с Mongoid, carrierwave и gridFS для хранения своих загрузок.

Например, у меня есть модельная статья, содержащая файл загрузки (изображение).

class Article
  include Mongoid::Document
  field :title, :type => String
  field :content, :type => String
  mount_uploader :asset, AssetUploader
end

Но я бы хотел сохранить файл только один раз, в случае, если я буду много раз загружать один и тот же файл для разных статей.

Я видел, что GridFS имеет контрольную сумму MD5.

Как лучше всего предотвратить дублирование одинаковых файлов?

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

Спасибо

1 Ответ

0 голосов
/ 30 декабря 2010

Дедупликация вполне может быть достойной целью, в зависимости от вашего приложения, но мой первый инстинкт к решению этой проблемы - перевернуть ее - почему вы ожидаете много повторяющихся загрузок?Можете ли вы уменьшить эту вероятность, чтобы пользователям не приходилось тратить лишнее время на загрузку, и вам не нужно было тратить лишние усилия на обработку проверок на наличие дубликатов?

Что если вы создадите модель Asset и прикрепитедобавьте к этому, затем Article references_one :asset, и вы позволите пользователям выбирать из уже доступных ресурсов при создании новой статьи или при необходимости загружать новую?

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

...