[Python-es] Almacenamiento en disco automático y transparente

Francesc Alted faltet en gmail.com
Lun Oct 28 14:58:03 CET 2013


On 10/28/13, 1:49 PM, Daπid wrote:
> 2013/10/28 Kiko <kikocorreoso en gmail.com <mailto:kikocorreoso en gmail.com>>
>
>     Si los datos son lo suficientemente grandes como para que no
>     quepan en memoria
>
>
> El problema es que, en principio, no sé si va a ser así. Depende de 
> los datos en concreto y de la RAM instalada en la máquina (cualquier 
> cosa entre 4 y 16 GB). Me gustaría poder evitar el disco mientras 
> fuera posible, pero sin que el programa sea asesinado.

Creeme, a no ser que tengas requerimientos muy precisos, mucho mejor que 
se encargue el SO.

>
>
>
> 2013/10/28 Francesc Alted <faltet en gmail.com <mailto:faltet en gmail.com>>
>
>         ¿Hay algo ya hecho? ¿Alguna idea más inteligente y eficiente?
>
>
>     Hombre, no se exactamente para que quieres cargar lo mas possible
>     el array en memoria, pero en esos casos yo lo que haria es guardar
>     todo el array en disco y dejar que sea el sistema operativo, y no
>     tu, quien decida que partes se cachean en memoria. A la larga es
>     mas practico y eficiente.
>
>
> Cierto, me olvidaba de la caché. Mi idea iba más por usar, digamos, 
> "backend en memoria" hasta que llegara a un cierto límite, en el que 
> pasaría a guardarse en disco. Pero quizá, usando directamente la 
> opción en disco, el SO mantendrá el contenido en caché mientras sea lo 
> suficientemente pequeño, y el rendimiento será lo suficientemente bueno.
>
> Otra opción sería carray, que tiene la ventaja de ofrecer exactamente 
> la misma API para memoria que para disco.
>
> http://carray.pytables.org/docs/manual/tutorial.html
>
> Veré cuál se ajusta más a mis especificaciones. Gracias por las ideas.

Bueno, yo tambien habia pensado en carray :). De todas maneras, el 
carray lo tengo medio abandonado porque basicamente lo hemos integrado 
como un subpaquete en el proyecto Blaze (blaze.pydata.org). El 
subpaquete se llama BLZ (blaze.blz), y se trata basicamente de carray, 
aunque con algunos retoques y mejoras. El manual de BLZ no lo 
encontraras en la web de Blaze ya que esta pensado para no ser visible 
directamente por el usuario final, sino mas bien como una forma de 
almacenaje mas de Blaze. Pero basicamente se puede tomar el manual de 
carray y reemplazando `carray` por `barray` y `ctable` por `btable` mas 
o menos todo deberia funcionar tal cual.

-- 
Francesc Alted



Más información sobre la lista de distribución Python-es