SQLite su un server di produzione? [chiuso]


9

Conosco SQLite da molto tempo e so che è velocissimo, ma non l'ho mai provato in un server di produzione. Non sono mai stato in grado di trovare una stima solida su quanto traffico poteva gestire prima di fallire.

Qualcuno ha qualche numero o un articolo su questo?


2
Avvertenza: la domanda e alcune risposte contengono idee sbagliate, incomprensioni e informazioni obsolete!
Chris S,

Abbiamo valutato SQLite come soluzione di memorizzazione nella cache in produzione: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi,

Risposte:


4

Sfortunatamente, non ho dati per te sulle capacità di carico, ma alcuni commenti su alcuni dei fattori che limitano le prestazioni:

  • La velocità di SQLite è influenzata dalla velocità del disco in cui si trova e dalla presenza di numerosi inserimenti / aggiornamenti (ad es. Accesso in scrittura). Il blocco in scrittura è limitato dalla velocità di rotazione del disco

  • Le transazioni vengono avviate per impostazione predefinita, ma si ottengono prestazioni migliori se si avvia e si esegue il commit della transazione. Ho avuto inserimenti di massa molto veloci durante la gestione della transazione a livello di codice

  • Se in genere stai solo leggendo i dati, otterrai una buona prestazione nella mia esperienza. Pertanto, SQLite può essere utilizzato come sistema di memorizzazione nella cache per memorizzare letture del server di database, in particolare quelle remote o query complesse.

  • Utilizza meno risorse di un server di database, quindi ciò può influire sulle prestazioni del sito in quanto libera più risorse per il server Web e il codice dell'applicazione

  • Se hai bisogno di un numero di scritture simultanee per essere possibile, allora un server di database (ad esempio MySQL, Postgres) potrebbe aiutarti meglio

Come affermato da Devrim , il sito SQLite afferma che circa 100.000 utenti / giorno dovrebbero andare bene. Un sistema Trac richiede scritture, quindi le prestazioni sarebbero probabilmente più lente in quel caso


Grazie per i respones, quindi in pratica puoi solo scrivere nel database 1 alla volta? Ma puoi ancora fare in modo che più persone leggano dal database senza essere bloccate? In tal caso, ho appena ricevuto alcune idee per un sistema di memorizzazione nella cache.
Dott. Hydralisk,

Il numero "100K" che viene lanciato è inutile. I documenti recitano "In generale, qualsiasi sito che ottiene meno di 100.000 visite / giorno dovrebbe funzionare bene con SQLite". Un "hit" è in genere definito come una richiesta HTTP. Ciò include una richiesta per ogni .js, .css e immagine su un hit. Cosa c'entra questo con le prestazioni del DB? Supponendo che gli autori volessero dire "visualizzazione di pagina", è ancora inutile. Quante query per visualizzazione di pagina? Rapporto tra letture e scritture? Su quale tipo di hardware è in esecuzione il DB? Non è una buona idea usare SQLite per un sito Web quando ci sono almeno una dozzina di altri strumenti migliori per il lavoro.
Jamieb,

@Dr Hydralisk Sì, le letture possono avvenire in parallelo .. proprio come un file
Cez,

@jamieb Il punto sui "successi" è giusto. Nessuno ha menzionato quali risorse hardware o server sono disponibili, quindi potrebbe essere un piccolo server virtuale per tutto ciò che conosciamo. Il coinvolgimento di database SQLite in un sistema di memorizzazione nella cache o principalmente di tabelle di sola lettura può offrire vantaggi in termini di prestazioni, in particolare quando il server di database è remoto. Cache di memoria + cache SQLite delle query del database batteranno da solo le query del database.
Cez,

3

Ho alcuni punti da aggiungere a queste buone risposte.

La versione corrente di SQLite ha WAL (Write-Ahead Logging) in modo che la lettura e la scrittura possano procedere contemporaneamente. Quindi la tradizionale limitazione del singolo autore menzionata nelle risposte precedenti non esiste più. Non ho ancora visto WAL in produzione, quindi non posso commentare quanto si ridimensiona.

Utilizzando WAL o no, se il database SQLite è di sola lettura (o è aggiornato in batch) e si adatta alla RAM (il sistema operativo dispone di RAM sufficiente per tenerlo nei buffer), può scalare molto bene su un'applicazione Web di produzione. Personalmente ero molto scettico riguardo alle sue prestazioni, scalabilità e robustezza, ma ora dopo nove mesi di produzione ha dimostrato di funzionare molto bene anche le parti più complesse del sistema .


1

Sqlite è ottimo per essere incorporato nelle applicazioni, ed è per questo che è progettato, ma sicuramente non è "incredibilmente veloce". Lo uso per molte delle mie applicazioni, puramente per la comodità di avere solo due file che possono essere copiati su un altro computer per dare un'applicazione completamente funzionante. I test su MySQL, utilizzando la stessa struttura, indici, ecc., Mostrano che Sqlite è notevolmente più lento, anche per database di piccole dimensioni. Mi aspetto che la differenza di prestazioni aumenti con l'aumentare delle dimensioni del database, anche se non posso dirlo con certezza poiché l'ho usato solo con database inferiori a 100 MB.


PRAGMA può essere regolato per aumentare le prestazioni a scapito di corrompere occasionalmente il database (senza perdere dati però). Nella mia esperienza, sono riuscito a fare in modo che SQLite eseguisse inserimenti a circa 250-300 rps su una vecchia macchina WindowsXP.
Djangofan,

-1, perché non sono d'accordo. Ho creato e interrogato database SQLite di diverse dimensioni GB e non avrei mai ricevuto la stessa quantità di query al secondo usando MySQL per esempio (nello stesso tipo di hardware). SQLite può facilmente eseguire 120.000 query di scrittura al secondo se sai come massaggiarlo correttamente .
Alix Axel,

0

Penso che sqlite sia solo più veloce di un file di testo / xml (potresti essere sorpreso se lo provassi). E non supporta la concorrenza, se si desidera creare un sito per intranet in cui le persone registrano il proprio orario di lavoro o utilizzano trac ticketing, potrebbe essere utile. Diverso da quello che dovrebbe essere evitato e sostituito da mysql o couchdb.

Il sito Web di sqlite dice che 100.000 utenti / giorno dovrebbero andare bene, ma ne dubito fortemente, dal momento che un semplice progetto trac si blocca molto con un uso in ufficio di 10 persone.


0

Sqlite non è un'applicazione DB client / server tradizionale. È essenzialmente una libreria incorporata in un'altra applicazione. È progettato per applicazioni desktop per utente singolo. Non vuoi assolutamente provare a usarlo come una sorta di sostituzione standalone MySQL / PostgreSQL / MS-SQL in un ambiente multiutente perché l'intero DB è bloccato in scrittura. Avrai a che fare con problemi di contesa anche su un carico leggero che distruggerà le prestazioni.


In WAL, vengono bloccati solo gli autori simultanei. Inoltre il motore MySQL predefinito (MyISAM) blocca anche le tabelle complete ogni volta che c'è una query di scrittura.
Alix Axel,

1
@AlixAxel Questa risposta è stata scritta sei mesi prima che WAL fosse disponibile.
Jamieb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.