Desidero sfruttare i vantaggi della velocità di tenere un database SQLite (tramite SQLAlchemy) in memoria mentre eseguo una procedura unica di inserimento del contenuto, quindi lo scarico in un file , conservato per essere utilizzato in seguito.Scaricare rapidamente un database in memoria nel file
Consideriamo un database bog-standard created in the usual way:
# in-memory database
e = create_engine('sqlite://')
C'è un modo più rapido di spostare i contenuti su disco, diverso da solo la creazione di un nuovo database del marchio e l'inserimento di ciascuna voce manualmente?
EDIT:
V'è qualche dubbio se o non avrei nemmeno vedere eventuali vantaggi di utilizzare un database in memoria. Purtroppo vedo già un'enorme differenza di tempo di circa 120x.
Questa confusione è probabilmente dovuta al fatto che mi mancano alcuni dettagli importanti nella domanda. Probabilmente anche a causa di una mancanza di comprensione da parte mia: cache/dimensioni di pagina/ecc. Consentitemi di elaborare:
Sono in esecuzione le simulazioni di un sistema che ho impostato, con ogni simulazione che passa attraverso le seguenti fasi:
- Effettuare alcune query al database.
- Effettua calcoli/esegue una simulazione in base ai risultati di tali query.
insert
nuove voci nel database basate sulla simulazione più recente.- Assicurarsi che il database sia aggiornato con le nuove voci eseguendo
commit()
.
Mentre ho sempre e solo fare una decina di inserzioni su ogni corsa di simulazione, io invece corro milioni di simulazioni, ed i risultati di ogni simulazione hanno bisogno essere disponibile per le simulazioni future di prendere posto. Come ho detto, questa lettura del processo di scrittura e richiede molto più tempo durante l'esecuzione di un database con backup di file; è la differenza tra 6 ore e un mese.
Speriamo che questo chiarisca le cose. Posso mettere insieme un semplice script python per delineare ulteriormente il mio processo un po 'più avanti se necessario.
Ho apportato una modifica alla domanda originale che risolve alcuni dei vostri punti. – JimmidyJoo
Non è possibile creare una cache di dati e conservare i dati in memoria dove sono utili? –
Supponendo di aver compreso correttamente la tua domanda, la mia risposta è no. Certo, non uso tutte le informazioni che scarico nel database, ma I * do * tuttavia usano un'informazione da ogni singola simulazione precedente che è stata eseguita. Le mie simulazioni stanno per diventare molto più complesse, usando i dati passati in modi più complicati. Speravo di usare i vari comandi di query di SQL per aiutarmi con un po 'di questo. – JimmidyJoo