PDA

View Full Version : [C#]XML vs MySql


Mattyfog
07-01-2010, 13:06
Vorrei un parere sulle prestazioni di xml e mysql in ambito .net.
Preferirei usare xml. In ogni caso il mio programma dovrebbe accedere anche a un migliaio o più file xml molto piccoli (non credo supereranno il kilobyte), leggere un dato per ognuno e compiere un'azione veloce. Ora, usando così tanti file xml, rischierei di compromettere le prestazioni? Meglio usare myql?

tomminno
07-01-2010, 13:16
Credo che la risposta dipenda dai dati che devi trattare.
Se i file contengono dati correlati (esempio sql di utilizzo di join), se devi modificare/inserire/cancellare dei record forse è il caso di affidarsi ad un db relazionale (non necessariamente MySql).
Se i file invece contengono solo dati scorrelati tra di loro e prevalentemente statici ovvero che non devono essere modificati di frequente, può anche essere più adatto l'utilizzo di file xml (meglio se cachati in qualche modo). Potresti avere però problemi di concorrenza nell'accesso ai file (esistono più software che lavorano sui file? Il programma sarà multithread?) e sicuramente un accesso continuo a tanti file non è ottimale per le prestazioni.

Ci vorrebbero un pò di dettagli in più sul contenuto di questi file e sul funzionamento del programma per esprimere un verdetto.

Mattyfog
07-01-2010, 13:23
i dati a cui il programma deve accedere non verranno mai modificati e saranno utilizzati solo da questo programma
volendo posso anche fare un software multithread.. :)

Mattyfog
08-01-2010, 14:16
up ;)

tomminno
08-01-2010, 14:36
Ma non hai modo di fare un xml unico?
In questo modo lo caricheresti una volta sola a quel punto l'elaborazione risulterebbe più veloce.

Mattyfog
08-01-2010, 18:38
si al massimo posso fare questo... comunque avendo un xml unico calerei in prestazioni?

Mattyfog
10-01-2010, 09:25
ma mysql si rivelerebbe comunque + performante?

khelidan1980
10-01-2010, 10:20
i dati a cui il programma deve accedere non verranno mai modificati e saranno utilizzati solo da questo programma
volendo posso anche fare un software multithread.. :)

se i dati non vengono scambiati con nessun altro sistema non vedo perchè usare xml, oltre alle prestazione devi fare il marshalling, unmarshalling etc e comunque anche se non verranno modificati li devi inserire e poi leggerli, io direi di usare un db, che non deve per forza esser mysql, puoi usare qualcosa di molto più leggero tipo sqlite

Mattyfog
10-01-2010, 12:12
Sql lite quindi è più veloce di mysql?
Perchè avrei approfittato della situazione per imparare mysql

khelidan1980
10-01-2010, 12:52
Sql lite quindi è più veloce di mysql?
Perchè avrei approfittato della situazione per imparare mysql

ma a livello di prestazioni non penso cambi niente, cioè non credo tu debba pilotare una mole di dati così elevata a quanto ho capito, è sicuramente più comodo da inglobare nella tua applicazione, è una semplice libreria non un server standalone come mysql...

Tu devi imparare specificatamente mysql? o devi imparare sql?

Mattyfog
10-01-2010, 13:54
a dire il vero non so neppure la differenza fra mysql e sql,,
cosa cambia?
so solo che mysql l'ho usato su siti web, o meglio joomla lo usa :)

DarkSiDE
10-01-2010, 14:29
a dire il vero non so neppure la differenza fra mysql e sql,,
cosa cambia?
so solo che mysql l'ho usato su siti web, o meglio joomla lo usa :)

mysql è un dbms, sql è un linguaggio

su wikipedia trovi tutte le spiegazioni del caso :)

Mattyfog
10-01-2010, 14:53
Ok credo mi basti questa tua spiegazione perchè io non voglio imparare un linguaggio nuovo, sto imparando il C# e questo mi basta, quindi diciamo che voglio imparare ad usare un database perchè a quanto mi avete detto dovrebbe essere meglio usare un db piuttosto che un semplice file xml.
Ora devo solo scegliere se usare mysql o sql lite. Pensavo a mysql perchè credo sia più usato e più potente e che quindi in futuro mi possa tornare più utile. Ma forse il metodo con cui si accede a questi 2 db in .Net è lo stesso grazie a ADO.NET o no?

Kralizek
10-01-2010, 19:02
se i dati non vengono scambiati con nessun altro sistema non vedo perchè usare xml, oltre alle prestazione devi fare il marshalling, unmarshalling etc e comunque anche se non verranno modificati li devi inserire e poi leggerli, io direi di usare un db, che non deve per forza esser mysql, puoi usare qualcosa di molto più leggero tipo sqlite

i problemi di serializzazione/deserializzazione li avresti anche con un db. Per serializzare in xml potrebbe usare il DataContractSerializer e passa la paura. :)

khelidan1980
10-01-2010, 19:14
i problemi di serializzazione/deserializzazione li avresti anche con un db. Per serializzare in xml potrebbe usare il DataContractSerializer e passa la paura. :)

Chiaro ma imho se si tratta solo di immagazzinare dati per poi andarli a ripescare sempre dalla stessa applicazione io penso che un db sia la scelta ottimale, non so, usare l'xml in questo caso la vedo un po come una forzatura! ;)

Ok credo mi basti questa tua spiegazione perchè io non voglio imparare un linguaggio nuovo, sto imparando il C# e questo mi basta, quindi diciamo che voglio imparare ad usare un database perchè a quanto mi avete detto dovrebbe essere meglio usare un db piuttosto che un semplice file xml.
Ora devo solo scegliere se usare mysql o sql lite. Pensavo a mysql perchè credo sia più usato e più potente e che quindi in futuro mi possa tornare più utile. Ma forse il metodo con cui si accede a questi 2 db in .Net è lo stesso grazie a ADO.NET o no?

Forse è meglio che ti chiarisci un po le idee, sql è il linguaggio che ti servirà per usare mysql o chi per essi, per manipolare i dati che salvi nel database

Mattyfog
10-01-2010, 19:47
non basta usare ADO.NET ?

tomminno
10-01-2010, 23:58
non basta usare ADO.NET ?

ADO.NET consente di connettersi ad un dbms e di gestire la comunicazione con esso, ma i dati li tiri fuori tramite SQL.
"SELECT * FROM Table", "INSERT INTO Table (id, value) VALUES (1, "Ciao")"ecc... sono i comandi che invierai al database tramite ADO.NET.

Kralizek
11-01-2010, 01:05
Chiaro ma imho se si tratta solo di immagazzinare dati per poi andarli a ripescare sempre dalla stessa applicazione io penso che un db sia la scelta ottimale, non so, usare l'xml in questo caso la vedo un po come una forzatura! ;)


purtroppo, non sapendo di cosa stiamo parlando, stiamo scrivendo solo per occupare spazio sul db del forum....

Mattyfog
11-01-2010, 21:10
principalmente nel db ci saranno dei percorsi di alcune cartelle che andranno copiate :) quindi sql mi serve? comunque non dovrebbe essere un grosso problema impararlo...

grazie a tutti intanto!

Mattyfog
12-01-2010, 06:31
Più che altro, forse, avrò bisogno di connettermi anche un a db che si trova su internet. Solo che su questo non so assolutamente nulla. Avendo un hosting su netsons posso fare l'upload dei file del db sul sito e poi riuscire ad accederci senza scaricarli? Accederci sempre da questo software che sarà un'applicazione desktop non in php o altri.

tomminno
12-01-2010, 07:55
Più che altro, forse, avrò bisogno di connettermi anche un a db che si trova su internet. Solo che su questo non so assolutamente nulla. Avendo un hosting su netsons posso fare l'upload dei file del db sul sito e poi riuscire ad accederci senza scaricarli? Accederci sempre da questo software che sarà un'applicazione desktop non in php o altri.

Questo è uno scenario completamente differente.
Hai comprato un servizio database dal provider?
Un db non è solo file ma anche un server che accetta delle connessioni e elabora le richieste.
L'alternativa è usare qualcosa come sqlite e un webservice che consenta l'interrogazione remota del db, a quel punto è realizzabile anche con il solo spazio web.

Mattyfog
12-01-2010, 12:24
Si, ho anche un db online, ma forse sarebbe meglio usare sqlite

Mattyfog
13-01-2010, 11:21
ultima informazione per essere sicuri:
quindi se faccio un upload di un db sqlite posso accederci con un software desktop senza bisogno di scaricare file del db?

tomminno
13-01-2010, 11:38
ultima informazione per essere sicuri:
quindi se faccio un upload di un db sqlite posso accederci con un software desktop senza bisogno di scaricare file del db?

Devi ovviamente scrivere un qualcosa che ti interfacci con il file, tramite http.
Generalmente si usano webservice.

Mattyfog
13-01-2010, 11:47
è difficile?
ma comunque si può?
perchè con mysql avete detto che avrei bisogno anche del db fornito dal provider e quindi non potrei caricare i dati sul mio hosting..

Mattyfog
13-01-2010, 18:02
Aggiungo anche un'altra domanda a quelle del post precedente: non ho ben capito come installare sqlite. E' gia incluso in visual studio express 2008? Devo scaricare la dll? O ancora qualcosa a parte perchè non ci sono le api per il c#?

tomminno
13-01-2010, 21:26
Aggiungo anche un'altra domanda a quelle del post precedente: non ho ben capito come installare sqlite. E' gia incluso in visual studio express 2008? Devo scaricare la dll? O ancora qualcosa a parte perchè non ci sono le api per il c#?

Sqlite non fa parte del framework .NET, devi installare sulla tua macchina di sviluppo System.Data.SQLite http://sqlite.phxsoftware.com/ (l'installer registra in GAC gli assembly) e usarlo nella soluzione come un qualunque altro assembly.
Si usa come un qualunque altro provider ADO.NET.
Nel deploy ti basta solo avere nella cartella bin l'assembly System.Data.SQLite.dll, comunque già inserito automaticamente da visual studio usando la funzione deploy.

tomminno
13-01-2010, 23:02
è difficile?
ma comunque si può?
perchè con mysql avete detto che avrei bisogno anche del db fornito dal provider e quindi non potrei caricare i dati sul mio hosting..

Non è difficile.
Devi solo pensare che in un'ottica di sviluppo a layer il tuo applicativo desktop userà come data access layer un webservice invece che la connessione diretta al database. Il webservice dovrà implementare tutti i metodi che ti sono necessari per il tuo applicativo.
Scrivere un webservice è un'operazione banale, crei un progetto website e aggiungi un file di tipo webservice (asmx).

Mattyfog
14-01-2010, 12:51
ok grazie di tutto di cuore! :)
inizio lo sviluppo poi se avrò qualche altra domanda mi faccio risentire!