2011-11-06 14 views
5

Ero curioso di sapere se qualcuno che mi ha insegnato se usare SQLite per memorizzare un dizionario (come nella forza bruta) per l'uso in uno script Python era un metodo efficiente. Mentre sono relativamente nuovo a Python, ho un bel po 'di esperienza con altri linguaggi di programmazione e sto attualmente lavorando a uno strumento di pentesting da utilizzare in Backtrack. Finora sono rimasto molto impressionato dalla velocità e dalla semplicità di Python e le mie query SQL sembrano funzionare in modo ideale per restituire i prefissi necessari per il mio strumento brute force. Tuttavia, immagino che cosa mi stia chiedendo qual è lo standard per la memorizzazione di file di dati di grandi dimensioni in Python? Sto trascurando un modo migliore (più veloce) di memorizzare i miei prefissi semplicemente per il mio comfort con SQL? Tieni presente che non sto usando Python per interrogare gli ID da 0 a n e li uso, piuttosto sto usando Python per restringere le possibilità e interrogare quelle voci del dizionario che corrispondono ai criteri. Qualsiasi aiuto o opinione sarebbe molto apprezzato!Quanto veloce è SQLite via Python

+0

Quanto velocemente Vuoi che sia? Quanto è grande il set di dati MB, GB, TB? Cosa intendi per "prefissi" è come in "albero prefisso" (trie)? Quanto bene le operazioni che eseguite sui dati corrispondono al modello relazionale? – jfs

risposta

3

Sì, sqlite è una scelta ragionevole per l'implementazione di un dizionario. Per velocità, usa l'opzione: memory: e assicurati di creare gli indici appropriati per le tue ricerche e query.

Per database di grandi dimensioni e persistenti funziona anche bene. Per velocità, fai attenzione a eseguire transazioni di grandi dimensioni anziché per chiave.

Gli usi proposti e appropriate per SQLite come archivio dati è coperto al loro sito web: http://www.sqlite.org/features.html

1

Se Raymond Hettinger raccomanda, inoltre, SQLite, allora questo è probabilmente la soluzione migliore.

Ma una soluzione Python nativa sarebbe utilizzare un file "pickle". Dovresti creare un Python dict che trattiene i dati, quindi "scodellare" il dict; più tardi potevi "sbrogliare" il ditt. Se hai solo una chiave su cui devi cercare, allora questo potrebbe essere un buon modo per andare.

Per Python 2.x è probabile che si desideri utilizzare il modulo cPickle. Per Python 3.x, c'è solo pickle, ma credo che sia veloce quanto cPickle.

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

D'altra parte se il set di dati è davvero grande, così grande che SQLite sta iniziando a soffocare su di esso, allora invece di dividere in su in più file SQLite più piccoli e la loro gestione, potrebbe avere senso di scaricare tutto in un vero database come PostgreSQL.