Tengo un relativamente gran diccionario. ¿Cómo puedo saber el tamaño? bueno, cuando le guardarlo usando cPickle el tamaño del archivo aumentará de tamaño aprox. 400Mb. cPickle se supone para ser mucho más rápido que pickle pero cargar y guardar este archivo solo lleva un montón de tiempo. Tengo un Dual Core computadora portátil 2.6 Ghz con 4GB de RAM en un equipo Linux. ¿Alguien tiene alguna sugerencia para un más rápido, guardar y cargar de diccionarios en python? gracias

¿Cuáles son las claves y los valores en su diccionario? Aribitrary Python tipos de datos?
sería posible usar sqlite en su lugar, de modo que usted no tiene que cargar todo en memoria?
Establecer el protocolo argumento de cPickle a 2
las claves son tuplas con número variable de miembros de 2 a 5. y los miembros de la cadena que están codificados en utf-8

OriginalEl autor Hossein | 2011-03-09

5 Comentarios

  1. 14

    Utilizar el protocolo=2 opción de cPickle. El protocolo predeterminado (0) es mucho más lento, y produce archivos mucho más grandes en el disco.

    Si desea trabajar con un diccionario más grande que la memoria puede almacenar, el dejar de lado módulo es una buena y rápida solución sucia. Actúa como una memoria dict, pero las tiendas de sí mismo en el disco en lugar de en la memoria. dejar de lado se basa en cPickle, así que asegúrese de ajustar el protocolo distinto de 0.

    Las ventajas de una base de datos como sqlite más de cPickle dependerá de su caso de uso. ¿Con qué frecuencia se escriben los datos? ¿Cuántas veces esperar a leer cada dato de que usted escribir? Se desea realizar una búsqueda de los datos que escriba, o cargar una pieza a la vez?

    Si usted está haciendo escribir una vez, leer muchas, y la carga de una pieza a la vez, por todos los medios el uso de una base de datos. Si usted está haciendo escribir una vez, leer una vez, cPickle (con cualquier protocolo que no sea el protocolo predeterminado=0) será difícil de batir. Si lo que desea es una gran persistente, dict, el uso de dejar de lado.

    Tengo el mismo problema. Mi diccionario es mayor que la de 16GB. ¿Por qué dejar de lado un «sucio» de la solución?

    OriginalEl autor Andrew

  2. 2

    Sqlite

    Podría ser conveniente almacenar los datos en un Sqlite de la base de datos. Aunque habrá algunas desarrollo sobrecarga cuando la refactorización de su programa para trabajar con Sqlite, que también se convierte en mucho más fácil y eficiente para la consulta de la base de datos.

    Usted también consigue las transacciones, atomicidad, serialización, compresión, etc. gratis.

    Dependiendo de qué versión de Python que se está utilizando, es posible que ya han sqlite incorporado.

    OriginalEl autor Ezra

  3. 1

    Usted puede poner a prueba a comprimir su diccionario (con algunas restricciones, consulte : este post) será eficiente si el acceso a disco es el cuello de botella.

    OriginalEl autor philnext

  4. 1

    Sé que es una pregunta vieja, pero sólo como una actualización para aquellos que buscan una respuesta a esta pregunta:
    El protocol argumento ha sido actualizado en python 3 y ahora hay incluso más rápido y más eficiente opciones (es decir, protocol=3 y protocol=4) lo que podría no funcionar en python 2.
    Usted puede leer más sobre esto en las referencia.

    Con el fin de utilizar siempre el mejor protocolo compatible con la versión de python que se está utilizando, usted puede simplemente utilizar pickle.HIGHEST_PROTOCOL. El siguiente ejemplo es tomado de la referencia:

    import pickle
    # ...
    with open('data.pickle', 'wb') as f:
        # Pickle the 'data' dictionary using the highest protocol available.
        pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

    OriginalEl autor Moran Neuhof

  5. 0

    Que es una gran cantidad de datos…
    ¿Qué tipo de contenido tiene su diccionario? Si sólo es primitivo o fija, tipos de datos, tal vez una verdadera base de datos o un archivo de formato es la mejor opción?

    OriginalEl autor Freax

Dejar respuesta

Please enter your comment!
Please enter your name here