2012-02-05 17 views
5

Sto studiando le funzionalità di SQLite e ho scoperto il SQLite Shared-Cache Mode che è disabilitato per impostazione predefinita.Abilita cache condivisa per cercapersone in sqlite con PHP PDO

Shared-Cache è:

destinato per l'utilizzo in server incorporati

perché condivide una cache di dati singoli e schema tra thread o processi. Sono interessato all'utilizzo di sqlite (con cache condivisa) in PHP (e Python) quindi le mie domande sono:

1) ogni connessione PDO in uno script PHP a un DB sqlite è considerata una singola connessione isolata?

2) in caso affermativo, l'utilizzo della Modalità cache condivisa potrebbe migliorare le prestazioni in uno scenario di concorrenza elevata; per attivare Shared-Cache Modalità uno deve chiamare questa funzione C:

int sqlite3_enable_shared_cache(int); 

come chiamare quella funzione attraverso la DOP?

Sembra quasi impossibile ma forse c'è una soluzione.

migliori saluti, Fabio Buda Web Developer/Designer @netdesign

risposta

0

Ho cercato attraverso il codice sorgente PHP per trovare una risposta per voi. Nessun file in ext/pdo_sqlite/ chiama mai la funzione sqlite3_enable_shared_cache, il che significa che non è implementato.

+0

è quello che pensavo ... –

5

Si può fare il seguente trucco per abilitare SQLite condivisa funzionalità di cache in codice PHP:

define('SQLITE3_OPEN_SHAREDCACHE' , 0x00020000); 
$sqlite = new SQLite3('sqlite.db3' , SQLITE3_OPEN_READWRITE | SQLITE3_OPEN_CREATE |  SQLITE3_OPEN_SHAREDCACHE); 

e funziona, anche se un po brutto - test di performance su 10k utenti del database mostra un po 'di prestazioni (~ 3%) degradazione. Sembra che questa non sia cache di query (risultati), ma una cache di memoria di dati di tabella non elaborati. Ecco perché dovrebbe beneficiare solo di enormi database con un elevato livello di concorrenza.

+1

Questa risposta è davvero eccezionale, tuttavia l'esempio consigliato non mostra come utilizzare la costante definita con PDO – Sasho