2011-11-16 11 views
10

Ho bisogno di un accesso al database SQLite molto veloce. Impostazione dei parametri in questo modo:Come posso sincronizzare con il database SQLite del disco con PRAGMA sincrono = OFF

PRAGMA synchronize = OFF 
PRAGMA jorunal_mode = MEMORY 

rende la velocità sufficiente per il mio progetto. Queste impostazioni consentono a SQLite di lasciare la sincronizzazione con il file di database nelle mani del sistema operativo. Ma ci sono alcuni casi, alcuni inserti certi, dopo i quali devo essere sicuro che i dati siano stati scritti sul disco.

Esiste un modo per forzare SQLite a scrivere tutti i dati (in attesa nel diario di memoria) su disco?

Grazie.

risposta

7

Suggerisco di utilizzare lo implementato di recente. In questo modo, è possibile lasciare synchronous-normal e avere tutte le operazioni di scrittura scritti su disco, come si va:

transazioni di scrittura sono molto veloci in quanto comportano scrivere il contenuto una volta (contro due volte per le operazioni di rollback-Journal) solo e perché le scritture sono tutte sequenziali. Inoltre, sincronizzando il contenuto su il disco non è richiesto, purché l'applicazione sia disposta a sacrificare la durata di a seguito di una perdita di alimentazione o di un riavvio forzato. (. Scrittori di sincronizzazione del WAL su ogni transazione commit se PRAGMA sincrono è impostata a pieno, ma omettere questa sincronizzazione se PRAGMA sincrona è impostata su NORMALE)

È possibile che questo

è tratto da:

http://www.sqlite.org/wal.html

Se ciò non è sufficiente, è comunque possibile richiamare PRAGMA database.wal_checkpoint; quando si vuole essere certi che le proprie scritture non vengano solo scritte su disco, ma anche "integrate" nel DB. Controllare il seguente per ulteriori informazioni:

http://www.sqlite.org/pragma.html#pragma_wal_checkpoint

+0

Questo è esattamente come ho fatto questo. – kappa

Problemi correlati