Если ваши изображения не слишком большие, их размещение в базе данных с двоичным типом RoR: имеет большой смысл. Если у вас есть реплики базы данных, изображения бесплатно копируются на другие сайты, нет проблем с потерянными или овдовевшими изображениями, а проблемы атомарных транзакций становятся намного проще.
С другой стороны, Nessence прав, что Base64, как и любой другой уровень кодирования, добавляет к транзакциям нагрузку на сеть, память и ЦП. Если пропускная способность сети является вашей главной проблемой, убедитесь, что ваша веб-служба принимает и предлагает сжатые соединения с раздувом / gzip. Это снизит стоимость данных Base64 на сетевом уровне, хотя и за счет увеличения больше памяти и загрузки процессора.
Это архитектурные проблемы, которые следует обсудить с вашей командой и / или клиентом.
Наконец, позвольте мне напомнить вам о поддержке RoR XML REST. Тип базы данных Rails :binary
станет <object type="binary" encoding="base64">...</object>
объектами XML при рендеринге в XML с использованием кода, подобного следующему из стандартных скаффолдингов:
def show
@myobject = MyObject.find(:id)
respond_to do |format|
format.xml { render => @myobject }
end
end
Это прекрасно работает для операций GET, а операции PUT и POST так же легко написать. Подвох заключается в том, что операции Rails PUT и POST не принимают одинаковые теги. Это связано с тем, что код from_xml
не интерпретирует тег type="binary"
, а ищет type="binaryBase64"
. На сайте маяка Rails есть ошибка с патчем, исправляющим это.