Come posso creare un database in memoria sqlite3?
-
08-07-2019 - |
Domanda
Uno degli usi appropriati per sqlite3 è " database in memoria " ;. Sembra uno strumento davvero utile per le mie applicazioni C ++. Qualcuno ha un esempio di come questo viene fatto in C o C ++? Sto specificatamente cercando un modo canonico per slurpare diversi file flat in un database in memoria, quindi fare alcuni join.
Soluzione
In realtà è abbastanza semplice. Basta specificare ': memory:' come nome file del database quando si apre un database usando l'API C / C ++. È una costante speciale che il motore riconoscerà. Lo stesso funziona in realtà per altri linguaggi come Python o Ruby, poiché in genere avvolgono semplicemente l'API C / C ++. Vedi http://sqlite.org/c3ref/open.html per i dettagli completi.
Altri suggerimenti
Basta aprire il file: memory: e questo dovrebbe farlo (almeno lo fa in PHP).
Dici di voler leggere diversi file flat e di unirti ad essi. Se è possibile archiviare i file flat come database SQLite, è possibile lavorare direttamente con entrambi collegando uno all'altro:
ATTACH foo.db AS foo
Quindi fai riferimento alle tabelle in foo in questo modo:
SELECT * FROM foo.users
In questo modo è possibile eseguire i join senza la necessità di creare un database in memoria.
Se si desidera che SQLite non utilizzi i file temporanei come journal, ad esempio, non si desidera alcuna attività sui file diversa da quando si richiede manualmente una connessione, disconnessione, collegamento o scollegamento. Quindi utilizza i due pragmi seguenti in fase di runtime dopo esserti connesso alla tua ": memoria: " banca dati.
PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;
Dai documenti.