Domanda

Di recente ho letto questa Domanda su SQLite vs MySQL e la risposta ha sottolineato che SQLite non scala bene e il sito ufficiale una sorta di conferma, tuttavia.

Come scalabile è SQLite e quali sono i suoi superiori più limiti?

È stato utile?

Soluzione

Ieri ho pubblicato un piccolo sito* per monitorare il vostro rappresentante che ha usato un comune database SQLite per tutti i visitatori.Purtroppo, anche con il modesto carico che ha messo sul mio host ha funzionato abbastanza lentamente.Questo è perché l'intero database è stato bloccato ogni volta che qualcuno ha visualizzato la pagina, perché in esso contenute aggiornamenti/inserimenti.Siamo passati subito a MySQL e mentre non ho avuto molto tempo per testarlo, mi sembra molto più scalabile rispetto a SQLite.Mi ricordo solo un lento caricamento della pagina e, occasionalmente, di ottenere un database bloccato di errore quando si tenta di eseguire query da shell in sqlite.Detto questo, io sono in esecuzione un altro sito da SQLite bene.La differenza è che il sito è statico (es.Io sono l'unico che può modificare il database) e quindi funziona bene per i concorrenti legge.Morale della storia:solo utilizzare SQLite per i siti web in cui gli aggiornamenti al database capita raramente (meno spesso di ogni pagina caricata).

modifica:Ho appena realizzato che non può essere stato in fiera a SQLite non è indice di tutte le colonne del database SQLite quando io ero da una pagina web.Questo in parte causato il rallentamento che stavo vivendo.Tuttavia, l'osservazione di database-chiusura stand - se avete particolarmente oneroso aggiornamenti, SQLite prestazioni non corrispondono MySQL o Postgres.

un'altra modifica: Da quando ho postato questo quasi 3 mesi fa ho avuto l'opportunità di esaminare attentamente la scalabilità di SQLite, e con pochi accorgimenti può essere molto scalabile.Come ho detto nel mio primo edit, indici del database di ridurre drasticamente il tempo di esecuzione della query, ma questo è più di una osservazione generale sui database che su SQLite.Tuttavia, c'è un altro trucco è possibile utilizzare per accelerare SQLite: transazioni.Ogni volta che si deve fare di più database scrive, metterli all'interno di una transazione.Invece di scrivere (e chiusura) il file ogni volta che una scrittura di query viene rilasciato, la scrittura avviene soltanto una volta quando la transazione è completa.

Il sito che ho citato ho pubblicato nel primo paragrafo ha acceso di nuovo a SQLite, e gira abbastanza bene, una volta ho sintonizzato il mio codice in pochi luoghi.

* il sito non è più disponibile

Altri suggerimenti

Sqlite è scalabile in termini di singolo utente, ho multi-gigabyte database che si comporta molto bene e non ho avuto molti problemi con questo.

Ma è singolo utente, quindi dipende da che tipo di scala di cui stai parlando.

In risposta ai commenti.Nota che non c'è nulla che impedisce l'uso di un database Sqlite in un ambiente multi-utente, ma ogni transazione (in effetti, ogni istruzione SQL per la modifica del database) prende un blocco su file, per impedire ad altri utenti di accedere al database a tutti.

Quindi, se avete un sacco di modifiche al database, essenzialmente si sta andando a colpire problemi di scaling molto veloce.Se, invece, hai un sacco di accedere in lettura rispetto per l'accesso in scrittura, potrebbe non essere così male.

Ma Sqlite, naturalmente funzione in un ambiente multi-utente, ma non eseguire bene.

SQLite unità il sqlite.org sito web e altri che hanno un sacco di traffico.Essi suggeriscono che se si hanno a meno di 100k visite al giorno, SQLite dovrebbe funzionare bene.E che è stato scritto prima della consegna del "Writeahead Registrazione" caratteristica.

Se si vuole accelerare le cose con SQLite, effettuare le seguenti operazioni:

  • aggiornamento a SQLite 3.7.x
  • Attivare write-ahead logging
  • Eseguire il seguente pragma:"PRAGMA cache_size = Numero di pagine;" La dimensione predefinita (Numero di pagine) è di 2000 pagine, ma se si aumenta il numero, quindi, farà aumentare la quantità di dati che è in esecuzione direttamente in memoria.

Si potrebbe desiderare di dare un'occhiata al mio video su YouTube chiamato "Migliorare SQLite Prestazioni Con Writeahead Registrazione"che mostra come utilizzare write-ahead logging e dimostra un 5x miglioramento della velocità di scrittura.

Sqlite è una desktop o in-process database.SQL Server, MySQL, Oracle, e i loro fratelli sono server.

Database Desktop sono, per loro natura, non è una buona scelta per il qualsiasi applicazione che ha bisogno di supporto simultaneo accesso in scrittura ai dati di archivio.Questo include, a un qualche livello più siti web mai creato.Se devi eseguire il login per nulla, probabilmente avete bisogno di scrivere accesso al DB.

Hai letto questo SQLite docs - http://www.sqlite.org/whentouse.html ?

SQLite solito grande lavoro come motore di database medio-basse il traffico di siti web (che è a dire, Il 99,9% di tutti i siti web).La quantità di traffico web che SQLite in grado di gestire dipende, naturalmente, da come fortemente il sito web utilizza i suoi database.In genere parlando, ogni sito che riceve meno di 100K di accessi/giorno dovrebbe funzionare bene con SQLite.Il 100K di accessi/giorno figura è una stima prudente, non duro limite superiore.SQLite è stato ha dimostrato di lavorare con 10 volte che quantità di traffico.

SQLite scalabilità molto dipendono dai dati utilizzati e il loro formato.Ho avuto qualche esperienza dura con extra lunghi tavoli (GPS record, un record per la seconda).L'esperienza ha dimostrato che SQLite rallenta in più fasi, in parte, a causa della costante riequilibrio della coltivazione di alberi binari di partecipazione gli indici (e con timbro datario indici, è solo sapere un albero che sta per arrivare riequilibrato un sacco, ma è di vitale importanza per le ricerche).Così, alla fine, a circa 1 gb (molto ballpark, lo so), la query diventa lento nel mio caso.Il vostro chilometraggio può variare.

Una cosa da ricordare, nonostante tutte le vantandosi, SQLite NON è fatta per il data warehousing.Ci sono vari usi non raccomandato per SQLite.La gente per bene dietro SQLite dire a se stessi:

Un altro modo di guardare a SQLite è questo:SQLite non è progettato per sostituire Oracle.È stato progettato per sostituire fopen().

E questo porta all'argomento principale (non quantitativa, mi dispiace, ma qualitativo), SQLite non è per tutti gli usi, mentre MySQL in grado di coprire molteplici usi, anche se non ideale.Per esempio, si potrebbe avere MySQL memorizzare i cookie di Firefox (invece di SQLite), ma c'è bisogno che il servizio in esecuzione tutto il tempo.D'altra parte, si potrebbe avere una transazionale sito web in esecuzione su SQLite (come molti fanno) invece di MySQL, ma aspettare un sacco di tempo di inattività.

penso che un (nei numeri da 1) webserver che serve hunderts di clienti appare sul back-end con una singola connessione al database, non è vero?

Quindi non c'è nessun accesso simultaneo nel database e quindi possiamo dire che il database funziona, in "single user mode".Non ha senso diskuss l'accesso multi-utente in una simile circostanza, e così SQLite opere nonché degli eventuali altri basati su server di database.

Penso in questo modo.SQL Lite sarà bloccato ogni volta che qualcuno lo usa (SQLite non si blocca in lettura).Quindi, se il vostro servizio di una pagina web o di un applicazione che dispone di più utenti simultanei solo uno potrebbe usare la tua app alla volta con SQLLite.Quindi, a destra c'è un problema di scalabilità.Se la sua una persona di una applicazione di dire una Libreria Musicale in cui si tiene centinaia di titoli, valutazioni, informazioni, l'utilizzo, la riproduzione, il tempo di gioco SQL Lite sarà una magnifica scala di partecipazione di migliaia, se non milioni di dischi(disco Rigido disposti)

MySQL invece funziona bene per i server di applicazioni in cui la gente di tutto, sarà contemporaneamente.Non si blocca ed è abbastanza grande.Quindi, per la vostra libreria musicale MySql sarebbe più di uccidere come solo una persona che vorresti vedere, a MENO che questa è una libreria musicale condivisa, dove migliaia di aggiungere o aggiornare i dati.Quindi MYSQL sarebbe quella di utilizzare.

Quindi, in teoria MySQL scale meglio di Sqllite causa è in grado di gestire mutiple utenti, ma è eccessivo per un singolo utente app.

SQLite sito (la parte a cui si fa riferimento) indica che può essere utilizzato per una varietà di multi-utente, situazioni.

Direi che è in grado di gestire un bel po'.Nella mia esperienza è sempre stato molto veloce.Naturalmente, è necessario indice delle tabelle e quando si codifica contro di esso, è necessario assicurarsi che si utilizza parameritized query e simili.Fondamentalmente le stesse cose che si farebbe con qualsiasi database per migliorare le prestazioni.

Potrebbe essere la pena di verificare SQL Server REALE, che è un server di database costruito su SQLite.

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