domingo, 21 de septiembre de 2008

Guardar datos comprimidos en base de datos con rails

En ciertas ocasiones es posible que queramos tratar los datos que vienen de una aplicación rails antes de guardarlos en base de datos. Para ello podemos sobrecargar los métodos nombre_parametro y nombre_parametro= en el modelo correspondiente.

Si, por ejemplo, tenemos un campo de la base de datos que preveemos que ocupe mucho espacio y no va a leerse frecuentemente se puede comprimir de la siguiente forma.

class Post < ActiveRecord::Base

def text
Zlib::Inflate.inflate(read_attribute(:text))
end

def text=(new_text)
old_text=read_attribute(:text)
new_compress_text=Zlib::Deflate.deflate(new_text)
write_attribute(:text, new_compress_text) if old_text!=new_compress_text
end
end

Para comprimir/descomprimir los datos se usa la librería zlib así que es necesario hacer require 'zlib'.

Además es necesario que el campo de la base de datos esté marcado como binario.

0 comentarios: