xml o db ?

Stato
Discussione chiusa ad ulteriori risposte.

cyd

Utente Silver
11 Giugno 2007
59
0
1
70
ciao,

ho un'applicazione web (diciamo in php ma la domanda ha carattere generale) e a seguito di una richiesta specifica devo recuperare dei dati precedentemente salvati (per esempio dei commenti).
premesso che una o più connessioni al database (es. mysql tramite mysql_*) vengono effettuate a prescindere da questa evenienza mi conviene , in termini di velocità, prestazione e memoria utilizzata, ricorrere al salvataggio\recupero su database o invece appoggiarmi a dei file xml?

so che la situazione è diversa per dati più o meno grandi, ma non so quantificare questa differenza e questo è il nocciolo della domanda.


già che ci sono un'altra questione:
ho da fare una semplice gestione dei messaggi d'errore di un'applicazione web (php+mysql+xml ecc).
le stringhe, a meno di rifiniture e dati che si aggiungono a seconda della situazione, le ho gia scritte.
ho suddiviso logicamente gli errori in 'fasce' di interesse, cioè in tipologie di errori, avendo così più o meno 10 classi.
ho una funzione che in ingreso riceve il codice dell'errore a cui corrisponderà il messaggio opportunamente formattato (il codice perchè il sistema è mulilingua e quindi la funzione dev'essere indipendente dalla lingua) e in uscita la stringa d'errore.
cosa mi conviene fare, (sempre in termini di prestazioni) usare un file xml dove scrivere le associazioni codice\errore dei files (l'idea era un file per ogni classe) .php con dentro delle definizioni di delle costanti?
certo il primo è più semplice logicamente ma il secondo mi sembra richieda meno sbattimenti per php... che mi consigliate?
grazie
 
Io consiglio di utilizzare richieste mysql solo quando è strettamente necessario. Ogni volta che esegui una query, stai affidando un certo carico di lavoro al server, mentre se fai una richiesta ad un file xml sul server, l' esecuzione è più immediata. Quindi, ti conviene creare un file xml aggiornato ogni volta da lato amministratore, cossicchè i tuoi utenti possano effettuare dei metodi di ricerca più veloci e dettagliati. Mi spiego meglio:

Supponendo che devi effettuare una ricerca in un database di regioni, province e comuni e il tuo database è strutturato così:

Tabella Regioni
Tabella Province
Tabella Comuni

non ha senso creare un form che carichi ogni volta Regioni, Province, Comuni dal database, ma ti conviene creare un file xml aggiornato ogni qual volta che tu inserisci una regione, una provincia o un comune, cossicchè da caricare nel form utente in modo dinamico i dati richiesti dal file xml e successivamente, a riempimento di tutti i campi richiesti, eseguire la query MySQL al database.
 
si, l'idea di un indice non è male ma il poterlo usare dipende dalla particolare applicazione, il mio era un discorso piu generale.
per esempio quando i dati iniziano ad essere molti caricare un file grande in memoria ogni volta per ottenere un singolo dato non mi sembra molto felice.
cioè il nocciolo è, con una richiesta ad un db (a connessione gia stabilita quindi togliamo gli sbatti dovuti alla connessione)
scarico sul server che ospita mysql il lavoro(che non è detto sia lo stesso su cui sta l'app), e questo server è comunque attivo e mysql va lo stesso indipendentemente da questo e poi php carica in memoria poco piu dei dati che effettivamente mi servono (se non sbaglio ovviamente). mentre aprire un file xml anche abbastanza pesante mi implica caricare in memoria molti dati che non mi servono, dover parsare il file e dover sfruttare risorse per muovermi attraverso i nosdi...

cos'è meno costoso? boh, comunque potrei frammentare il file xml in piu files e potrei usare un'azione combinata utilizzando xml come indice e sql come db per i testi per esempio... ma conviene effettivamente sia aprire un xml sia fare richieste al db?

in ogni caso la seconda domanda è quella che mi preme di piu e se riesci a darmi un'idea su quello mi fare sti un favore!

Grazie per la risposta!
 
In base alla mia esperienza posso dirti che gestire dei file xml è molto meno "costoso" (in termini di risorse) che gestire delle richieste ad un database. Ajax è semplice ed immediato, inoltre non richiede di ricaricare l' intera pagina PHP solo per aggiornamento dei dati. Quando tu lavori con richieste mysql devi ricordarti che fai 2 cose.
1) Esegui delle query ad un database MySQL (con consumo di TOT risorse)
2) Carichi la pagina PHP (con consumo di altre TOT risorse).
e questo lo devi fare ogni qual volta tu vuoi aggiornare la tua pagina client side.
Con ajax il discorso è diverso. Qui puoi trovare un esempio pratico che ti fa capire meglio la differenza.
MySQL viene utilizzato per memorizzare dati che normalmente non dovrebbero essere accessibili a livello client.
 
sisi conosco ajax,
mi riferivo però a delle funzioni in fase di esecuzione dello script lato server.
 
per esempio una gestione dei commenti.



piuttosto, per questa questione:
cyd ha detto:
ho da fare una semplice gestione dei messaggi d'errore di un'applicazione web (php+mysql+xml ecc).
le stringhe, a meno di rifiniture e dati che si aggiungono a seconda della situazione, le ho gia scritte.
ho suddiviso logicamente gli errori in 'fasce' di interesse, cioè in tipologie di errori, avendo così più o meno 10 classi.
ho una funzione che in ingreso riceve il codice dell'errore a cui corrisponderà il messaggio opportunamente formattato (il codice perchè il sistema è mulilingua e quindi la funzione dev'essere indipendente dalla lingua) e in uscita la stringa d'errore.
cosa mi conviene fare, (sempre in termini di prestazioni) usare un file xml dove scrivere le associazioni codice\errore dei files (l'idea era un file per ogni classe) .php con dentro delle definizioni di delle costanti?
certo il primo è più semplice logicamente ma il secondo mi sembra richieda meno sbattimenti per php... che mi consigliate?
grazie
che mi consigli?
 
Per una gestione di commenti ti consiglio MySQL. E' più sicuro perchè una volta filtrato correttamente l' input dei tuoi utenti, la gestione risulta sicura e veloce.
 
Ok allora se non ho capito male tu hai una funzione x ( int codice_errore ) e in base all errore deve restituire l'output formattato e nella lingua in uso esatto?
dipende se la mole di informazioni è poca, mi pare sia più performante XML però non saprei neanche come farlo un XML del genere, invece se ci sono molti messaggi d'errore userei sql, poichè risulta più veloce IMHO quando si tratta una grande mole di dati, con sql farei tipo una tabella cosi:
Codice:
CREATE TABLE error ( 
             TEXT CHAR ( 80 ) NOT NULL,
             ID INT NOT NULL,
             LINGUA CHAR ( 2 ) NOT NULL );

[ TEXT ]                         [ ID ]                           [ LINGUA ] 
mi piaciono i treni...            85                               IT
e poi andrei a recuperare in caso di errore il text sapendo ID e LINGUA, che non so come sia impostata la variabile per la lingua ma facilmente convertibile ^^


Riguardo i commenti, Sql è sicuramente migliore, è più sicuro, se non sbaglio non è accessibile a tutti ( anche xml può non esserlo ma comunque è più sicuro sql ) e se non sbaglio risulta anche più semplice da fare ^^
Spero di esserti stato d'aiuto ^^
 
BrainStorm ha detto:
Codice:
[ TEXT ]                         [ ID ]                           [ LINGUA ] 
mi piaciono i treni...            85                               IT
:lol::lol::lol:

gifiliketrains.gif


Lol comunque scherzi a parte credo che se tipo abbia una variabile che definisce la lingua
tipo
Codice:
$LINGUA = "IT"
Sia meglio MySql anche per la gestione della query visto che non è complicato mettere di fila un SELECT seguito da un WHERE e AND ^^

:)

Tu che ne pensi brain ? :) per la gestione degli errori va bene sql?
 
Io utilizzerei un file log di testo per la gestione degli errori, con annesso ora e data dell' errore. Non ha senso sprecare risorse per una gestione simile quando puoi fare tutto a mano e più semplicemente. :temg:
 
BrainStorm ha detto:
Io utilizzerei un file log di testo per la gestione degli errori, con annesso ora e data dell' errore. Non ha senso sprecare risorse per una gestione simile quando puoi fare tutto a mano e più semplicemente. :temg:

Aspetta che forse ho capito male io: da quello che ho capito io lui non vuole fare un DB per vedere quando accade un errore e loggarlo, ma vuole semplicemente fare un DB per gestire le stringhe testo del errore e cambiarle in base alla lingua
cioè
Codice:
[ APP ] -( ID, LINGUA )---> [ SERVER ]
[ APP ] <--( Text )-------- [ SERVER ]
Ditemi se ho sbagliato ^^
 
No no hai detto giusto, avevo capito male io. Ma il problema è sempre lo stesso. Perchè scomodare un database mysql oppure fare richieste xml quando esiste la funzione "define" in PHP???
 
BrainStorm ha detto:
No no hai detto giusto, avevo capito male io. Ma il problema è sempre lo stesso. Perchè scomodare un database mysql oppure fare richieste xml quando esiste la funzione "define" in PHP???
Perchè l'uomo ha l'abitudine a complicarsi la vità ^^

comunque sisi anche il metodo che dici tu se ho capito bene è più che valido ^^ comunque se ho letto bene l'ui instaura già connessioni con il Database Mysql a prescindere da questo, quindi si tratterebbe di un interrogazione in + e di una tabella in più nel DB ^^
 
allora c'è un po di confusione nell'aria.

appoggiarsi ad un db per dei semplici messaggi d'errore è (nel mio caso) la scelta peggiore (non ha senso), infatti ho posto due domande distinte, una riguardo a dati ingenti quali potrebbero essere commenti o testi, l'altra riguarda gli errori e in questo secondo caso la scelta verteva sulla definizione di N costanti, sulla gestione di un xml con N nodi o su N cicli (tipo uno switch co N+1 casi (1 è il default)) e qui il db era ovviamente escluso a priori

per gli errori ho optato per costanti suddivisi su più files in modo da includere e quindi definire il minor numero possibile di costanti. un file xml sarebbe stata una scelta più logica per organizzazione e modifiche runtime senza dover scrivere del codice, ma è un dettaglio di secondo piano e mi sembra che la pesantezza rispetto a delle costanti non ne valga la pena. tutto qui. l'unico problema stava nel fatto che le costanti sono globali, ma anche questo passa in secondo piano.

per quanto riguarda i commenti\testi beh a livello di sicurezza non c'è molta differenza, solo che usando SimpleXML è più uno sbattimento (e computazionalmente più pesante) effettuare il filtraggio dei testi, dopodichè con un htaccess risolvo l'accessibilità. il problema è nelle prestazioni quando ci sono molti files e molti testi grandi molti byte. Infatti una ricerca su un db Tsql è più performante che una ricerca su ogni file. In definitiva opterò per il database

grazie delle risposte.
 
Lo so che la mia è stata una risposta inuitile D:
però tipo lo so che interlacciarsi con un Db sql per gestire i messaggi d'errore è uno spreco inutile di risorse e tempo, però secondo me se la mole di errori da visuallizzare è grande, mi sembra più performante Sql inconfronto a XML ^^
 
EvilMau ha detto:
Lo so che la mia è stata una risposta inuitile D:
però tipo lo so che interlacciarsi con un Db sql per gestire i messaggi d'errore è uno spreco inutile di risorse e tempo, però secondo me se la mole di errori da visuallizzare è grande, mi sembra più performante Sql inconfronto a XML ^^

beh si, ma la suddivisione degli errori in classi risolve in parte questo problema. per completezza dirò come ho risolto(la perte degli errori)

nell'applicazione ogni situzione di errore genera un codice della forma
Codice:
[0-9]x[0-9]{3}
dove la prima cifra(prima dell' x) segnala il livello dell'errore (fatale, warning da mostrare runtime, errore da stampare e basta ecc) e le altre tre cifre il codice d'errore vero e proprio.
ciò vuol dire che ad esempio invoco la funzione X(..) che mi restituisce un codice d'errore 302, e a secoda dell'ambito in cui sono chiamerò la funzione error($code) con un livello d'errore adeguato + il codice d'errore restituito da X, ad esempio
Codice:
error('1x304');

a questo punto error() dopo i vari controlli carica il file <path_file_della_lingua>/errors/e_300.php

che contiene le definizioni dgli errori della classe 300, tra cui la 304.

a questo punto error sostituisce eventuali variabili nel messaggio d'errore e in base al livello (in questo caso 1) esegue l'errore.

in definitiva ogni parte dell'applicazione quando incontra un errore sa che deve seplicemente chamare error() con $code settato a dovere.

ps. nessuna risposta che non sia OT è inutile
 
Carina come tecnica quella del:
Codice:
[0-9]x[0-9] {3}
comunque ho capito allora fai come hai spiegato te avevo inteso male, ^^
[ot]
EDIT: Ho pure io circa lo stesso problema ^^ solo che sono indeciso se sul mio Cms in sviluppo fare un DB file in cui passo un nome tipo
Codice:
http://localhost/?p=linux
e controlla se è presente nella directory /documents un file chiamato linux.txt se non c'e stampa il solito errore: pagina non valida, mentre se è presente stampa il contenuto sul div body XD
oppure la scelta più ovvia e quella che sto facendo e farmi un login da admin, 3 app php per scrivere vedere / modificare e cancellare il DB sql, e principalmente funziona cosi:
Codice:
http://localhost/?id=5
Codice:
[ TEXT ]                [ ID ]        [ VIEW ] 
Linux....                 5              3
Cat........                6              1

Dove ID e VIEW sono 2 integer ( ps: view serve principalmente per il mio sistema di reputazione XD che somma le view di * articoli e poi usa la solita formula della percentuale e stampa tipo : popolarità 4% ecc..

ma è attuabile sono con sql questo almeno che non utilizzi XML , ma la dovrei riscrivere tutto xD[/ot]
 
Stato
Discussione chiusa ad ulteriori risposte.