ruby serialization redis sha1 digest

¿Puedo serializar un objeto de instancia Ruby Digest:: SHA1?



serialization redis (1)

¿Has considerado y puedes enviar los SHA1 de los 64k? Habría más datos de suma de comprobación, pero sabría dónde salieron las cosas, y no habría necesidad de almacenar el estado interno del resumen.

G''day personas,

Estoy volviendo a implementar un servicio de carga de archivos personalizado existente en ruby ​​(sinatra) con redis como una tienda de respaldo.

El cliente calcula un hash SHA1 e inicia una carga carga un máximo de 64K fragmentos hasta que termine

El servidor agrega trozos al archivo calcula el hash SHA1 del archivo completo para verificar la recepción correcta

Ahora, lo que espero hacer es usar el operador ruby ​​(1.9.3) Digest :: SHA1 << (actualizar) en cada fragmento, (en lugar de tener que leer el archivo COMPLETO desde cero al final). [Archivos grandes> 1GB].

Desafortunadamente Digest :: SHA1 y Marshal.dump no son compatibles

1.9.3p125 :001 > require ''digest'' => true 1.9.3p125 :002 > $digest = Digest::SHA1.new => #<Digest::SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709> 1.9.3p125 :003 > marshalled_digest = Marshal.dump($digest) TypeError: no _dump_data is defined for class Digest::SHA1 from (irb):3:in `dump'' from (irb):3 from /Users/rhodry/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'' 1.9.3p125 :004 >

¿Alguien tiene alguna idea sobre cómo:

  1. Acceda a la memoria subyacente (manipulada en C) y almacene / restaure un objeto así?
  2. ¿Obtiene una implementación alternativa que permitiría un caso de uso similar?

Gracias,

parameme

Actualización: gist: 2280705 implementa la opción 1 usando ruby ​​FFI - espero que sea útil para otra persona