Domanda

Ho due processi:

  1. Scrive per due tabelle ogni secondo (ish)
  2. Legge da detto tabelle periodicamente

So che con SQLite, eventuali operazioni di scrittura bloccare l'intero database e quindi a volte il secondo processo possono fallire con un database bloccato.

C'è qualcosa che può suggerire che eliminerebbe completamente la necessità di questi due processi a toccare la stessa base di dati? Per esempio, potrei atomicamente trasferire i dati dal database in fase di scrittura di un secondo database di sola lettura?

Grazie:)

È stato utile?

Soluzione

È possibile configurare la connessione al database nel secondo processo per attendere un certo tempo quando incontra un database occupato, svegliarsi periodicamente per verificare la presenza di un database gratuito, prima di rinunciare.

sqlite3_busy_timeout(sqlite3*, int ms);

http://www.sqlite.org/c3ref/busy_timeout.html

Altri suggerimenti

Posso suggerisco di leggere le FAQ su SQLite filo di sicurezza ?

  

Le discussioni sono il male . Evitare di loro.

     

SQLite è threadsafe. Facciamo questa concessione dato che molti utenti scelgono di ignorare i consigli forniti nel paragrafo precedente. Ma per essere thread-safe, SQLite deve essere compilato con la macro SQLITE_THREADSAFE preprocessore impostato a 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top