2010-04-02 19 views
6

Per impedire che un database in memoria SQLite venga ripulito, è necessario utilizzare la stessa connessione per accedere al database. Tuttavia, utilizzando la stessa connessione, SQLite sincronizza l'accesso al database. Pertanto, se ho molti thread che eseguono letture su un database in memoria, è più lento su un computer multi-core rispetto allo stesso codice esatto in esecuzione su un database supportato da file.I database SQLite in memoria possono scalare con la concorrenza?

C'è un modo per ottenere il meglio da entrambi i mondi? Cioè, un database in memoria che consente più chiamate simultanee al database?

risposta

3

La risposta è no. Ho chiesto al gruppo di utenti SQLite e ho ricevuto la seguente risposta da Pavel Ivanov:

No, SQLite non supporta l'accesso simultaneo completo a qualsiasi database. La concorrenza dello è quella di avere un database su disco senza cache condivisa (quindi avere diverse copie del database nella memoria ). Ovviamente non considero l'opzione della concorrenza da processi diversi.

0

da qui ho capito che risposta è sì http://www.sqlite.org/faq.html#q6

+0

Ciò significa solo che è sicuro da utilizzare da più thread. Posso testimoniarlo. Ma non scala: utilizza solo un singolo core del mio dual core. Quindi è sicurezza a scapito delle prestazioni. Aggiornamento del mio titolo per chiarire. –

+0

"usa solo un singolo core" - significa che i tuoi thread sono stati spediti in quel modo! Ciò può essere causato da un blocco interno o altra sincronizzazione in sqlite. Se si desidera realmente la concorrenza DB +, è necessario considerare un codice personalizzato con lo svuotamento finale sul DB condiviso. penso che tu voglia da sqlite troppo. – Andrey

+1

il punto è che funziona con un database SQLite basato su file (consumo della CPU del 100%), ma non con un database in memoria. Se SQLite non supporta questo scenario, va bene, ma ho bisogno di una citazione. –

2

Se si imposta la dimensione della pagina e dimensione della cache abbastanza grande da contenere l'intero database, le operazioni di lettura saranno soddisfatte dalla cache e le prestazioni saranno quasi uguale a un database in memoria.

+0

+1 Idea interessante - Lo terrò a mente. –

Problemi correlati