2009-08-24 12 views
9

ho visto un paio di domande di prestazioni SQLite qui su StackOverflow, ma l'attenzione era su siti web, e sto considerando di utilizzare questo DB in uno scenario client-server:SQLite per client-server

  • Prevedo che i client 1-10 per un server per ora, potrebbero salire fino a 50 o più in futuro.
  • leggermente più letture di scrive
  • DB sedeva dietro un processo server (vale a dire: non utilizzando l'accesso DB diretta attraverso una rete)

stesse usando SQLite rendere l'applicazione meno reattivo anziché utilizzare PostgreSQL ? La mia intuizione mi dice che dovrebbe essere ok per questi carichi, ma forse qualcuno ha qualche esperienza pratica con questo tipo di scenario.

+2

Poiché un sito web * è * un'app client-server lication, non capisco perché questo è diverso. Cosa pensi sia diverso? Perché stai dicendo che un'applicazione client server non è essenzialmente la stessa di un'applicazione web server? –

+0

Essenzialmente è lo stesso, ma la domanda di scalabilità di SQLite era un contatore di conto Stackoverflow, quindi immagino che abbia modelli di accesso totalmente diversi. Un'altra importante differenza sarebbe che posso controllare saldamente tutto lo stack tecnologico, mentre con un browser alcune scelte sono predeterminate per te. – rpg

+1

@ rpg: Sì, quando hai la tua configurazione c/s, hai più controllo sull'intero come in una configurazione del sito. Questo a mio parere parla di SQLite - quando è scalabile in una configurazione di un sito Web, perché non dovrebbe essere nella tua configurazione, dove hai più controllo? Inoltre, gli schemi di accesso possono essere un problema, ovviamente. Molte scritture (combinate con le letture) mettono a dura prova un motore DB come pura impostazione di sola lettura. Sicuro! Direi che dipende dalla quantità di dati che in genere cambi in un round trip (numero di righe, colonne e tabelle ...). Sei in grado di mettere quelle scritture in una transazione ... e così via – Juergen

risposta

13

Ho utilizzato SQLite per un prodotto client/server principale utilizzato con ~ 10 utenti simultanei e I rimpiango profondamente la decisione. A mio parere PostgreSQL è molto più adatto per scenari client/server rispetto a SQLite a causa della sua granularità di chiusura fine.

Semplicemente non si può andare molto lontano, quando l'intero database è bloccato ogni volta che qualcuno ha bisogno di scrivere qualcosa ..

Mi piace moltissimo SQLite (ho anche scritto un programma di utilità commerciale per il confronto di database SQLite - SQLite Compare ma io Non pensate che si adatti al caso di scenari client/server

Anche l'autore di SQLite says che dovrebbe essere usato in sostituzione di formati di file personalizzati e non come server di database completo. consiglio più seriamente ..

+0

A mio parere si può avere solo problemi con granularità di chiusura fine quando si hanno più processi server che accedono a un file DB o i tuoi clienti accedono direttamente al DB. Quando hai un processo server - come puoi ottenere problemi di blocco (ok, devo aggiungere, che non usi thread ...)? – Juergen

+1

In realtà - Ho un singolo server che accede al database nel nome di più processi client. E allora? Nel mio caso - ogni client è rappresentato da un thread di lavoro nel server e quando si hanno più client che lavorano sul server, si avranno anche più thread che funzionano contemporaneamente sul motore del database. Poiché è molto difficile prevedere in anticipo come verrà effettivamente eseguito l'accesso al database (cioè schemi di lettura in lettura e scrittura) suggerisco caldamente di non prendere una decisione così limitante (usando SQLite invece di PostgreSQL) fin dall'inizio. –

+1

Esiste una nuova casa per l'utilità di confronto di SQLite? – Flimzy

3

Non hai menzionato quale versione del sistema operativo e di Postgres stai usando. Tuttavia, prima di prendere in considerazione la modifica del motore di database, provare a eseguire alcune attività di registrazione e benchmark del database corrente con l'utilizzo tipico, quindi ottimizzare le domande "più pesanti". E forse il tuo carico di elaborazione di backend rende irrilevante il tempo delle domande di DB? Come SQLite è un DBMS basati su file, l'accesso simultaneo da più processi peggiora le prestazioni quando il numero cliente cresce (editati dopo il commento)

Seguendo domanda può essere utile: How Scalable is SQLite?

+0

La degressazione delle prestazioni avverrà solo con un accesso concorrente diretto - ma come detto dall'OP, gli accessi sono indiretti con un processo di server inbetween ... questo potrebbe dare un piccolo rallentamento, ma senza degredamento. – Juergen

+1

Giusto, ho perso l'unico server per parte client multipli. Ad ogni modo, se la costruzione di DB è così semplice, può essere migrata a SQLite (nessuna elaborazione, trigger e routing lato DB), non penso che le prestazioni del DBMS possano essere un problema serio quando DB è ragionevolmente indicizzato. – tomash

+0

Non ho ancora scritto alcun codice. Sto lavorando sulla lista dei rischi del progetto, e la scalabilità è una di queste. Non si usa Postgres, ma i sistemi operativi saranno molto probabilmente XP, Vista all'inizio, in seguito Linux. – rpg

1

vorrei confermare al S. La risposta di Lott.

Non so come SQLite funzioni rispetto a PostgreSQL, dal momento che non conosco misure più recenti, ma la mia esperienza con SQLite in un ambiente piuttosto simile è piuttosto buona.

L'unica cosa che potrebbe causare problemi nel mio punto di vista è che avete un numero piuttosto elevato di scritture. Ma tutto dipende dal numero totale al secondo che vorrei dire.

Anche le impostazioni per l'elaborazione di un server sono ottimali per SQLite, a mio parere, quindi elimini la sua debolezza nel multitasking.