2012-06-05 22 views
9

Tengo un gran diccionario de Python de vectores (150k vectores, 10k dimensiones cada uno) de números flotantes que no se pueden cargar en la memoria, así que tengo que usar uno de los dos métodos para almacenar esto en el disco y recuperar vectores específicos cuando corresponda. Los vectores se crearán y almacenarán una vez, pero pueden leerse muchas (miles de) veces, por lo que es muy importante tener una lectura eficiente. Después de algunas pruebas con el módulo shelve, tiendo a creer que sqlite será una mejor opción para este tipo de tareas, pero antes de comenzar a escribir el código me gustaría escuchar más opiniones sobre esto ... Por ejemplo, ¿hay alguna otra opciones, excepto de esos dos que no conozco?Seleccionar entre shelve y sqlite para diccionario realmente grande (Python)

Ahora, suponiendo que estemos de acuerdo en que la mejor opción es sqlite, otra pregunta se relaciona con la forma exacta de la tabla. Estoy pensando en usar una estructura de grano fino con filas del formulario vector_key, element_no, value para ayudar a una paginación eficiente, en lugar de almacenar todos los 10k elementos de un vector en el mismo registro. Realmente agradecería cualquier sugerencia sobre este tema.

Respuesta

9

Desea sqlite3; luego, si utiliza un ORM como sqlalchemy, puede ampliar y utilizar fácilmente otras bases de datos back-end.

El estante es más un "juguete" que realmente útil en el código de producción.

El otro punto del que usted habla se llama normalización y personalmente nunca he sido muy bueno en él this debería explicarlo por usted.

Así como una nota extra this muestra fallas en el desempeño de estantería vs sqlite3

+0

Hola, he visto antes el enlace que estás sugiriendo, el problema es que solo prueba la escritura, no leer cuál es mi principal preocupación. En cuanto a la normalización, ambas formas que sugiero arriba ya están en forma normal, solo me pregunto cuál de las dos será la más eficiente para leer, supongo que puedo realizar algunas pruebas al respecto. En cualquier caso, gracias por la respuesta :) – dkar

3

Como se trata de vectores numéricos, es posible PyTables una alternativa interesante.

+0

Hola, parece ser una alternativa interesante, la veré mejor. Gracias por la sugerencia :) – dkar

Cuestiones relacionadas