2010-09-10 7 views
6

Ora gioco con questa idea da un po 'di tempo, ma non ho visto alcuna informazione sulle persone che lo fanno. Ho un piccolo progetto di sito web in cui ho bisogno di caricare e modificare 1 oggetto. Questo oggetto è piuttosto semplice e non dovrebbe essere più di qualche kb. Invece di eseguire un DB per questa piccola quantità di dati, perché non usare semplicemente pickle e/o shelve per salvare questi dati e caricarli? Sto pensando di utilizzare un framework per micro-web come Bottle o Flask per il progetto.C'è qualcosa di sbagliato nella creazione di un sito web alimentato con Pickle Python?

Ci sono motivi per non utilizzare questo metodo per caricare i dati? Caricherà solo il file pickle al momento dell'avvio di Apache, quindi non penso che la velocità verrà effettuata (più veloce di una query su db).

Grazie per qualsiasi input!

+0

Perché utilizzare pickle? Perché non un semplice testo in chiaro? Perché non il codice sorgente Python per l'oggetto? Perché limitarti a decapare l'oggetto? –

+1

C'è qualche ragione per non usare qualcosa come SQLite? –

+1

@ S.Lott L'oggetto contiene oggetti secondari, con alcuni oggetti datetime presenti. Potrei fare testo in chiaro se necessario. C'è una pagina sul sito per inserire un po 'di nuovi dati, ecco perché non può essere nella fonte stessa. Sto cercando di mantenere il sito semplice, senza DB se non ne ho bisogno. –

risposta

3

Non vi è alcun motivo per cui non è possibile implementare la persistenza dell'oggetto tramite i moduli standard Python o shelve. Assicurati solo che i tuoi oggetti siano puliti in modo pulito e sicuro. La scalabilità può diventare una preoccupazione se il tuo sito cresce oltre il tuo ambito attuale, ma fino ad allora la tua idea dovrebbe funzionare bene. Se quel giorno arriverà, il prossimo passo ovvio sarebbe considerare l'utilizzo dell'eccellente SQLite di Python module che viene fornito preconfezionato con le versioni recenti della lingua.

+0

Qualcosa come MongoDB sarebbe una transizione più facile da Pickle di quanto sarebbe SQL. –

+0

Sì, non c'è niente di sbagliato nel metterlo in funzione e farlo funzionare con pickle. E chissà, forse il sottaceto sarà sufficiente per il tuo problema. In caso contrario, è sempre possibile passare a un database quando diventa un problema. Mantienilo semplice finché non richiede di più. –

+0

@David MI ha già lavorato molto con SQL, quindi non sarebbe stato un problema, avrei solo scelto di usare MongoDB per ottenere più esperienza in NoSQL :) –

3

Non scriverei direttamente una stringa decapitata su un file. Ci sono troppi dettagli di basso livello di cui preoccuparsi. Controlla Durus, ZODB o this post from FriendFeed sull'archiviazione di oggetti Python in MySQL.

Non scartare i database relazionali, tuttavia, ti danno un sacco di botto subito (anche per progetti semplici).

+0

Grazie per i collegamenti. Se userò qualsiasi DB, sarà MongoDB. Non ho pensato al problema del framework che esegue più processi Python e non avendo accesso allo stesso oggetto se qualcosa è stato modificato. Dovrebbe innescare un qualche tipo di flag e ogni processo dovrebbe ricaricare il file pickled? Quali sono alcuni altri "dettagli di basso livello di cui preoccuparsi"? Grazie! –

1

Oltre ai problemi di concorrenza di cui si è già a conoscenza, è inoltre necessario assicurarsi che il file sia sempre in uno stato coerente. Ad esempio, se il server si blocca durante la scrittura del file, cosa succede allora? È un caso per cui devi prendere in considerazione e implementare una soluzione se segui questa strada.