soluzione di database multi-utente semplice
-
13-09-2019 - |
Domanda
Ho scritto un'applicazione desktop di Windows che funziona con Sqlite molto bene. E 'stata una singola applicazione utente, e il database si trova proprio sulla macchina in cui l'app funziona.
Tuttavia, l'applicazione è cresciuta, e ora più utenti dovrebbero essere in grado di eseguire l'applicazione e connettersi a un database condiviso.
Mi piacerebbe essere solo in grado di condividere il file SQLite su un'unità di rete, ma che sarebbe ovviamente causare i dati danneggiati a meno che qualcuno ha qualche idea.
Credo che avrei potuto richiedere l'installazione di un server di database, ma una licenza commerciale di MySQL non ha senso, PostgreSQL è abbastanza diverso che avrei dovuto riscrivere un sacco della mia applicazione. Non ho lavorato con Firebird a tutti, quindi non sono sicuro se questo è una buona soluzione oppure no.
Ci sono i server database SQLite che possono essere installati che gestiscono le transazioni in entrata sul file di database SQLite?
Se ho bisogno il cliente per scaricare e installare MySQL per conto loro, devo avere una licenza commerciale?
Tutti i suggerimenti o direttive sarebbe grande, grazie.
Soluzione
Ci sono i server SQLite che rendono possibile l'uso di SQLite in un ambiente multi-utente. Leggi qui: http://www.sqlite.org/cvstrac/wiki?p=SqliteNetwork . Non so come queste soluzioni eseguono e la scala.
Altri suggerimenti
Si può essere in grado di utilizzare il file di Sqlite su un'unità di rete condivisa come lei ha descritto, a seconda del file system sottostante:
http://www.sqlite.org/faq.html#q5
Più processi possono avere lo stesso database aperto allo stesso tempo. processi multipli possono essere facendo un SELEZIONA allo stesso tempo. Ma solo una processo può essere apportando modifiche al banca dati in qualsiasi momento nel tempo, tuttavia.
SQLite utilizza serrature lettore / scrittore di controllare l'accesso al database. (Sotto Win95 / 98 / ME, che manca il supporto per lettore / scrittore serrature, una probabilistica simulazione viene utilizzato al posto.) ma l'uso attenzione: questo meccanismo potrebbe bloccaggio non funzionare correttamente se il database file viene conservato su un file system NFS. Questo perché fcntl) il blocco dei file ( è rotto su molte implementazioni NFS. Si dovrebbe evitare di mettere SQLite file di database su NFS se multipla processi potrebbero tentare di accedere al file allo stesso tempo. Su Windows, la documentazione di Microsoft afferma che bloccaggio potrebbe non funzionare in FAT filesystem se non si esegue la daemon Share.exe. Le persone che hanno un molta esperienza con Windows dimmi che il blocco dei file di file di rete è molto buggy e non è affidabile. Se quello che dicono è vero, la condivisione di un database SQLite tra due o più macchine Windows possono causare problemi imprevisti.
SQL Server Express , e 'gratuita e deve smettere di dover riscrivere la maggior parte del codice,
Credo che Firebird può essere una scelta molto buona
- È gratis
- versione embedded esistere
Non so il motivo per cui si assume che il file di dati verrà danneggiato se lo metti su un'unità di rete e lasciare più istanze di l'accesso applicazione allo stesso tempo. Se non principalmente la lettura, si dovrebbe essere a posto. Se si fanno un sacco di scrive, si avrà probabilmente subire un calo di prestazioni, dal momento che una sola istanza può scrivere allo stesso tempo. (Vedere http://www.sqlite.org/faq.html )
Se si fanno un sacco di scrive, probabilmente avrete bisogno di un'installazione server autonomo - avete considerato MS SQL Server Express? Dovrebbe essere facile e semplice per ottenere installato e funzionante.
Troppo tardi lo so, ma nessuno di questi giorni dovrebbe avere la necessità di scrivere un'applicazione senza un quadro che offre astrazione del database.
Personalmente io uso web2py che è un framework web basato su Python. Di default utilizza SQLite che è grande per le singole applicazioni utente sul desktop locale o di piccole e medie applicazioni sulla rete locale che sono principalmente le operazioni di lettura. Tuttavia, se ho deciso di aumentare la portata di utilizzo app, vorrei semplicemente modificare la stringa di connessione nel modal database da utilizzare un altro database. Web2py o qualsiasi altro contesto vale la pena utilizzare sarebbe semplicemente riscrivere le istruzioni SQL per soddisfare i nuovi requisiti.
utilizzare questo codice sul tuo stringa di connessione dopo che più utenti possono inserire, eliminare, selezionare e.t.c. nel database senza alcun problema.
SQLiteConnection con = new SQLiteConnection ( "Data Source = D: \ yourdatabase.db; Count Modifiche = off; Modalità ufficiale = off; Pooling = true; dimensione della cache = 10000; Formato pagina = 4096; sincrono = off");
Se ho bisogno il cliente per scaricare e installare MySQL per conto loro, devo avere una licenza commerciale?
No.
Il valore di una licenza commerciale di MySQL è che permette di distribuire MySQL standard o una MySQL modificato in forma binaria senza l'oblihation a distribuire anche il codice sorgente. Si dà anche accesso al sostegno.
Tuttavia, se l'utente ottiene MySQL se stessi da parte di Oracle, i luoghi GPL senza obblighi su di voi per fornire loro il codice sorgente di MySQL. Si può ottenere da Oracle. In effetti, Oracle ha l'obbligo di fornire, a condizione che distribuiscono sotto la licenza GPL.