2009-12-06 14 views
6

Ho scritto un'applicazione desktop Windows che funziona molto bene con Sqlite. Era un'app per utente singolo e il database si trova direttamente sulla macchina su cui viene eseguita l'app.Soluzione di database multiutente semplice

Tuttavia, l'applicazione è cresciuta e ora più utenti dovrebbero essere in grado di eseguire l'app e connettersi a un database condiviso.

Mi piacerebbe solo essere in grado di condividere il file sqlite su un'unità di rete, ma che ovviamente produrrebbe dati danneggiati a meno che qualcuno non abbia qualche idea.

Immagino di poter richiedere l'installazione di un server di database, ma una licenza commerciale MySQL non ha senso, PostgreSQL è abbastanza diverso da dover riscrivere gran parte della mia applicazione. Non ho lavorato affatto con Firebird, quindi non sono sicuro che sia una buona soluzione o no.

Esistono server di database Sqlite installabili che gestiscono le transazioni in entrata nel file di database Sqlite?

Se ho bisogno del client per scaricare e installare MySQL da solo, devo avere una licenza commerciale?

Qualsiasi suggerimento o direzione sarebbe fantastico, grazie.

+0

perché passare a postgresql causa la riscrittura di molta della tua applicazione, ma mysql no? – warren

+0

Basandosi solo sulla sperimentazione del passato con Postgresql. Ma dare un'altra occhiata probabilmente non farebbe male, sono passati alcuni anni. –

+3

Un aggiornamento, ho dato a Postgresql un altro tentativo, e in realtà sto avendo molto successo con esso. –

risposta

5

Che dire SQL Server Express, e 'gratuita e dovrebbe smettere di dover riscrivere la maggior parte del codice,

+0

Per votare, per favore lascia un commento perché questa non è una buona risposta? – Rippo

2

Non so il motivo per cui si assume che il file di dati verrà danneggiato se lo metti su un disco di rete e consenti a più istanze della tua app di accedervi contemporaneamente. Se fai principalmente lettura, dovresti stare bene. Se esegui molte scritture, probabilmente subirai un calo di prestazioni, poiché solo un'istanza può scrivere allo stesso tempo. (Vedi http://www.sqlite.org/faq.html)

Se si eseguono molte scritture, è probabile che sia necessaria l'installazione di un server autonomo: si è considerato MS SQL Server Express? Dovrebbe essere facile e semplice da utilizzare.

+0

Il forum Sqlite dice che se si trova su un file system FNS, non sarà in grado di bloccare. È vero che Windows ci condivide SMB e non NFS quindi non ci sarebbe probabilmente un problema? Sono preoccupato di dover scrivere il codice su ogni ricerca in loop se il file è bloccato. –

8

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

processi multipli possono avere lo stesso database aperto alla contemporaneamente. È possibile che più processi eseguano una SELEZIONE contemporaneamente. Tuttavia, solo un processo può apportare modifiche al database in qualsiasi momento, .

SQLite utilizza i blocchi lettore/scrittore su per controllare l'accesso al database. (Sotto Win95/98/ME, che manca il supporto per serrature lettore/scrittore, un probabilistico simulazione è usato al posto.) Ma l'uso cautela: questo meccanismo di bloccaggio potrebbe non funzionare correttamente se il file di database è mantenuto su un NFS filesystem. Questo perché il blocco di file fcntl ( è danneggiato su molte implementazioni NFS. Evitare di inserire i file di database SQLite su NFS se più processi potrebbero tentare di accedere al file allo stesso tempo.Su Windows, , la documentazione di Microsoft afferma che il blocco potrebbe non funzionare con i file system FAT se non si sta eseguendo il daemon Share.exe . Le persone che hanno una esperienza di con Windows mi dicono che il blocco dei file di rete è molto buggato e non è affidabile. Se ciò che dicono è vero, la condivisione di un database SQLite tra due o più computer Windows potrebbe causare problemi imprevisti .

+1

La pagina [When To Use] (http://www.sqlite.org/whentouse.html) sconsiglia di utilizzare SQLite direttamente su una rete quando ci sono più utenti/client. Si afferma "Una buona regola è che si dovrebbe evitare l'uso di SQLite in situazioni in cui lo stesso database sarà accessibile contemporaneamente da molti computer su un filesystem di rete". –

4

penso che Firebird può essere una scelta molto buona

  • È gratis
  • versione embedded esiste
+0

Ho passato molto tempo a cercare di far funzionare Firebird con la mia applicazione, ma ho finito per incappare in errori ad ogni passaggio. Dovevo andare alle FAQ circa 5 volte solo per capire perché non potevo creare un tavolo perché ogni volta che cambiavo qualcosa dalle faq, ricevevo un nuovo errore, dovevo tornare indietro, cambiare qualcosa, poi un altro errore. Principalmente basati su permessi. Non penso di voler passare attraverso queste frustrazioni con ogni cliente che cerca di installarlo. –

+0

Non conosco il tuo problema con il permesso ma se hai bisogno di alcuni buoni strumenti della GUI puoi usare www.upscene.com o www.ibexpert.com (entrambi hanno la versione gratuita) –

0

Troppo tardi lo so, ma nessuno in questi giorni dovrebbe avere bisogno di scrivere un'applicazione senza un framework che offra l'astrazione del database.

Personalmente uso Web2py che è un Web Framework basato su Python. Di default usa SQLite che è ottimo per le app per singolo utente sul desktop locale o per le piccole e medie app sulla rete locale che sono principalmente operazioni di lettura. Tuttavia, se decidessi di aumentare l'ambito dell'utilizzo dell'app, cambierei semplicemente la stringa di connessione nel modale del database per utilizzare un altro database. Web2py o qualsiasi altra struttura che valga la pena di utilizzare semplicemente riscrivere le istruzioni SQL per soddisfare i nuovi requisiti.

0

utilizzare questo codice sulla stringa di connessione dopo che più utenti possono inserire, eliminare, selezionare e.t.c. nel tuo database senza problemi.

SQLiteConnection con = new SQLiteConnection ("Origine dati = D: \ yourdatabase.db; Conteggio modifiche = off; Modalità journal = off; Pooling = true; Dimensione cache = 10000; Dimensioni pagina = 4096; Synchronous = off") ;

0

Se ho bisogno del client per scaricare e installare MySQL da solo, devo avere una licenza commerciale?

No.

Il valore di uso commerciale MySQL è che permette di distribuire MySQL standard o un MySQL modificato in forma binaria senza l'oblihation di distribuire anche il codice sorgente. Ti dà anche accesso al supporto.

Tuttavia, se l'utente ottiene personalmente MySQL da Oracle, la GPL non impone alcun obbligo all'utente di fornire loro il codice sorgente MySQL. Possono ottenerlo da Oracle. Infatti, Oracle è obbligato a fornirlo, purché distribuiscano sotto la GPL.

Problemi correlati