2011-11-06 8 views
5

Tenía curiosidad si alguien pudiera decirme si usar SQLite para almacenar un diccionario (como en fuerza bruta) para usar en un script de Python era un método eficiente. Si bien soy relativamente nuevo en Python, tengo bastante experiencia con otros lenguajes de programación y actualmente estoy trabajando en una herramienta de pentesting para usar en Backtrack. Hasta el momento, estoy bastante impresionado con la velocidad y la simplicidad de Python, y mis consultas SQL parecen estar funcionando bastante idealmente para devolver los prefijos necesarios para mi herramienta de fuerza bruta. Sin embargo, supongo que lo que me pregunto es ¿cuál es el estándar para almacenar archivos de datos de gran tamaño en Python? ¿Estoy pasando por alto una forma mejor (más rápida) de almacenar mis prefijos simplemente por mi comodidad con SQL? Tenga en cuenta que no estoy usando Python para consultar los ID de 0 a ny usarlos, sino que estoy usando Python para reducir las posibilidades y consultar aquellas entradas de diccionario que coincidan con los criterios. ¡Cualquier ayuda u opinión sería muy apreciada!Cuán rápido es SQLite a través de Python

+0

¿Qué tan rápido, ¿Le gustaría que fuera? ¿Qué tan grande es el conjunto de datos MB, GB, TB? ¿Qué quiere decir con "prefijos" es como en "árbol de prefijo" (trie)? ¿Qué tan bien las operaciones que realiza en los datos corresponden al modelo relacional? – jfs

Respuesta

3

Sí, sqlite es una opción razonable para implementar un diccionario. Para mayor velocidad, use la opción: memory: y asegúrese de crear los índices apropiados para sus búsquedas y consultas.

Para bases de datos grandes y persistentes, también funciona bien. Para mayor velocidad, asegúrese de realizar transacciones grandes en lugar de por clave.

Los usos sugeridos y apropiadas para SQLite como un almacén de datos está cubierta en su sitio web: http://www.sqlite.org/features.html

1

Si Raymond Hettinger también recomienda SQLite, entonces eso es probablemente su mejor apuesta.

Pero una solución nativa de Python sería usar un archivo "pickle". Construiría un Python dict que contenga los datos, luego "recortar" el dict; más tarde podrías "destripar" el dict. Si solo tiene una clave que necesita buscar, entonces esta podría ser una buena forma de hacerlo.

Para Python 2.x es probable que desee utilizar el módulo cPickle. Para Python 3.x, solo existe pickle, pero creo que es tan rápido como cPickle.

http://docs.python.org/library/pickle.html

Por otro lado, si el conjunto de datos es realmente grande, tan grande que SQLite está empezando a ahogar en él, entonces en vez de dividirlo en varios archivos SQLite más pequeños y gestión de los mismos, podría tener sentido para simplemente volcar todo en una base de datos real como PostgreSQL.

Cuestiones relacionadas