Pagina 6 di 6 primaprima ... 4 5 6
Visualizzazione dei risultati da 51 a 56 su 56
  1. #51
    Scusa, ma ti ripeto, a me non piace l'idea di usare un ORM (su PHP) perché introduce vari strati in più che introducono aumento di risorse e complessità.
    Tra l'altro poi un orm come doctrine che implementa il suo layer di astrazione del database che poggia su PDO, che è un framework di astrazione del database, che a sua volta poi, ovviamente, poggia sulle librerie di interfaccia di mysql è un'esagerazione ... almeno non avesse il suo layer di astrazione visto che sta usando PDO

    Poi, personalmente, mi sono fatto degli strumenti che mi permettono di farne a meno con estrema tranquillità.

    A tempi, quando ho iniziato a dare un occhiata agli ORM ho guardato sia doctrine sia propel, parlo di tre anni fa (anche tre e mezzo volendo), ma benché il concetto di ORM era interessante non mi è piaciuto più di tanto il come era implementato motivo per il quale mi sono realizzato, a tempi, degli strumenti che svolgono operazioni quasi simili e, ancora oggi, benché di tanto in tanto aggiunga qualche feature, si comportano più che bene e fanno il loro lavoro egregiamente.

    Ma me li sono scritti in modo da ridurre il consumo di risorse al minimo senza compromettere lo sviluppo del codice di per se.

    La memoria utilizzata dal mio CMS (costruito sul mio framework) di rado supera il MB e mezzo di memoria utilizzato e i tempi di esecuzione stanno sotto il decimo di secondo, conteggiato misurando anche il tempo di invio al browser (per fare le misurazioni utilizzo un htaccess con auto_prepend_file registra una funzione di shutdown che scrive in un file le informazioni che mi interessano tra cui le query eseguite, i tempi di esecuzioni delle query, i tempi di esecuzioni globali, la memoria utilizzata globale, la memoria utilizzata dai dati estratti con le query e via dicendo)

    Ultimo appunto: perché nel mio framework faccio uso delle funzioni mysql_*? semplice motivo, queste funzioni sono una mappatura quasi diretta delle funzioni delle librerie di mysql e quindi non ci sono vari layer di astrazione come ci sono invece per PDO.
    L'estensione mysqli, sinceramente, non l'ho più guardata perché se non ricordo male era buggata ed il suo sviluppo era stato fermato/rallentato in seguito a PDO, non so poi come le cose si siano messe relativamente a quell'estensione

    Molto in generale, i file dei modelli dei dati estendono una classe che interfacciandosi con il database permette la semplice generazione di query di select, update, insert (on duplicate key) e delete.
    Nello specifico i vari metodi di acquisizione (es. GetByPk, GetByUserId, GetByXYZ) mi corrispondono +/- alle chiavi che costruisco nel database, tutte comunque poggiano sul metodo GetByFilter che si occupa di prendere i filtri passati e, insieme ad altro materiale, costruirci la query tramite l'apposito metodo di supporto della classe base.
    Una volta costruita la query questa viene mandata in esecuzione sul mio layer di astrazione dei database (che è abbastanza semplicistico e attualmente supporta mysql, sqlite, odbc e db2) e poi costruisce l'oggetto da tornarmi (o l'array di oggetti da tornarmi indicizzati tramite chiave primaria).
    Per costruirmi l'oggetto, acquisisco l'array che prendo dal database e, nel ciclo while, lo faccio passare da un metodo che si occupa di tirarmi fuori un oggetto in base al nome della colonna ed in base al prefisso.
    Inoltre, in automatico, mi converte i nomi del database, che scrivo sempre strutturati in un certo modo, in camel case, e lo fa in modo veloce e semplice

    ESEMPIO:
    il campo person_first_name o person_last_name in automatico diventa $oggetto->FirstName o $oggetto->LastName

    nel momento in cui estraggo più tabelle lancio più volte la procedura di generazione della mappatura sempre in base al prefisso.
    ESEMPIO
    person_first_name, person_last_name, person_residence_address, person_residence_city, person_residence_zipcode, person_residence_province

    con il prefisso person_ mi tira fuori $oggetto->FirstName, $oggetto->LastName

    con il prefisso person_residence_ estrae invece $oggetto->Address, $oggetto->City, $oggetto->Zipcode, $oggetto->Province

    fondamentalmente non faccio altro che fare
    $person = $this->dbal->BuildObjectFromRow($row, 'person_');
    $person->Residence = $this->dbal->BuildObjectFromRow($row, 'person_residence_');

    Per i casi più complessi ho una procedura che mi fa la mappatura manuale alla quale passo un elenco di nome dell'oggetto e nome del campo/funzione da associare.
    E' veloce, mi funziona bene, e mi accelera nella scrittura del codice a sufficienza, motivo per il quale, personalmente, non sento la necessità di usare un ORM.

    E, ripeto, se dovessi (potessi) scegliere, lavorerei direttamente con un database oo e/o con uno storage per la persistenza degli oggetti

    In generale, comunque, con questi semplici strumenti non sento la mancanza di un ORM e nel contempo ho prestazioni elevate e un consumo di risorse molto basso => questa procedura elabora 10000 records composti da 20 campi da mappare in circa 1.6s, ovvero, mediamente, 0.0001s a record
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  2. #52
    Secondo me stai dando troppa importanza a dei benchmark che vogliono dire poco e niente al di la' del puro gusto dei numeri. La realta' dei fatti e' che le astrazioni delle librerie di accesso ai DB aggiungono un overhead trascurabile nell'economia totale della richiesta HTTP + esecuzione. I puri tempi di esecuzione del codice in un'applicazione PHP non sono importanti come - per esmpio - in un motore grafico di un videogioco: differenze che comunque rimangono nell'ordine dei decimi di secondo (al massimo) non sono realmente percettibili in un ambiente in cui gia' solo per connetterti a un server, inviare la richiesta, scaricare la risposta e renderizzare il tutto ci metti minimo 400ms.

    La differenza di tempi e comodita' di sviluppo - in un ambiente in cui le app sono quasi sempre in costante evoluzione - invece e' sostanziale. E' un po' il motivo per cui le web app si scrivono in linguaggi come PHP e non in C.

    I tempi di esecuzione che citi nel tuo caso non vogliono dire molto se non si sa cosa fa il tuo CMS, che tipo di dati elabora, che quantita' di dati elabora, su che macchina/e gira, ecc.

    Per quanto riguarda la scelta di interfaccia, IMHO usare ancora le funzioni mysql_* e' follia, principalmente perche' non hai nemmeno i prepared statements, ma anche perche' sono funzioni di una libreria ormai vecchia e del tutto superata da PDO.

    Poi non ho capito perche' dai per scontato che una libreria ORM aggiunge un sacco di complessita' e penalizza le prestazioni mentre la tua libreria personale no
    Magari sei il programmatore piu' bravo del mondo ed e' vero, pero' mi sembra poco saggio scartare a priori soluzioni che comunque sono abitualmente usate in produzione da progetti molto grandi

  3. #53
    Originariamente inviato da k.b
    Secondo me stai dando troppa importanza a dei benchmark che vogliono dire poco e niente al di la' del puro gusto dei numeri. La realta' dei fatti e' che le astrazioni delle librerie di accesso ai DB aggiungono un overhead trascurabile nell'economia totale della richiesta HTTP + esecuzione. I puri tempi di esecuzione del codice in un'applicazione PHP non sono importanti come - per esmpio - in un motore grafico di un videogioco: differenze che comunque rimangono nell'ordine dei decimi di secondo (al massimo) non sono realmente percettibili in un ambiente in cui gia' solo per connetterti a un server, inviare la richiesta, scaricare la risposta e renderizzare il tutto ci metti minimo 400ms.
    e per carità, sono perfettamente d'accordo, ma il problema è che se il brower impiega 400ms a renderizzare tutto e poi la pagina impiega 2 secondi per rispondere ... evidentemente è meglio iniziare ad ottimizzare il backend

    ovviamente i benchmark non sono la strada assoluta da seguire, ma li faccio camminare di pari passo insieme alla semplicità di scrittura del codice

    se posso ricercare strutture alternative, che magari non sono semplici semplici come un ORM, ma sono comunque semplici in modo accettabile ma nel contempo mi forniscano performance considerevolmente superiori, perché non dovrei farlo?

    un meccanismo che mi fa il mapping in automatico, basta scrivere i nomi dei campi in un modo ben preciso, per me è sufficientemente semplice, così come lo è il mio sistema di gestione dei modelli, che ormai conosco a fondo. Tranne che devo costruire elementi VERAMENTE complessi per i quali non posso utilizzare le strutture di supporto che mi sono realizzato, vado abbastanza veloce.

    La differenza di tempi e comodita' di sviluppo - in un ambiente in cui le app sono quasi sempre in costante evoluzione - invece e' sostanziale. E' un po' il motivo per cui le web app si scrivono in linguaggi come PHP e non in C.
    e siamo perfettamente d'accordo, ma non ho fatto altro che trovare una via di mezzo tra i tempi di esecuzione e la comodità di sviluppo

    indubbiamente utilizzare un ORM di terze parti si butta esclusivamente sulla comodità di sviluppo, io ho preferito perderci un po in questo punto e trovare una via di mezzo

    I tempi di esecuzione che citi nel tuo caso non vogliono dire molto se non si sa cosa fa il tuo CMS, che tipo di dati elabora, che quantita' di dati elabora, su che macchina/e gira, ecc.
    verissimo, era giusto per fare un esempio, anche se capisco che è abbastanza vado

    Per quanto riguarda la scelta di interfaccia, IMHO usare ancora le funzioni mysql_* e' follia, principalmente perche' non hai nemmeno i prepared statements, ma anche perche' sono funzioni di una libreria ormai vecchia e del tutto superata da PDO.
    definirla follia è assurdo e sbagliato e si basa su dei preconcetti che non capisco

    hai mai guardato il sorgente dell'estensione mysql di php? non è altro che un'interfacciamento (quasi) 1 ad 1 delle funzioni esposte dalla libreria nativa di mysql (o mysqlnd) stessa

    se su questo costruisco il mio layer di astrazione, che vantaggio concreto mi da PDO? fa la stessa cosa che faccio io solo che lui la fa direttamente in C nell'estensione?
    Ma a parte quello non mi da nessun vantaggio concreto, in quanto le posso reimplementare nel mio layer di estrazione.

    Da un punto di vista di performance, non ho mai valutato PDO in modo approfondito, ma dai test (superficiali) che ho fatto il mio layer di astrazione perdeva contro PDO quando si lavorava con le migliaia di query eseguite

    detto questo, personalmente non faccio uso dei prepared statement perché il loro vantaggio principale, tutto sommato, è quando lanci molte volte la stessa query ma non lancio mai 2 query di select uguali, e per le query di insert (che uso in particolari condizioni anche per gli update di massa) utilizzo l'on duplicate key insieme all'inserimento multiplo di valori

    qualcosa tipo
    codice:
    INSERT INTO
      tabella
    
    (
        campo1,
        campo2,
        campo3,
        campo4,
        campo5
    )
    
    VALUES
        (1,2,3,4,5),
        (6,7,8,9,10),
        (11,12,13,14,15)
    
    ON DUPLICATE KEYS UPDATE
        campo1 = VALUES(campo1),
        campo2 = VALUES(campo1),
        campo3 = VALUES(campo3),
        campo4 = VALUES(campo4),
        campo5 = VALUES(campo5)
    che fa il suo lavoro in modo egregio, veloce e performante

    mi devo solo preoccupare di rispettare i vincoli delle chiavi, ma in generale lo si fa anche con gli update quando si imposta la where, casi particolari a parte, quindi non ho il problema

    per quanto riguarda l'escape dei valori, ho un sistema che si basa su mysql_real_escape_string/vsprintf e funziona in modo semplice ed è abbastanza veloce

    Poi non ho capito perche' dai per scontato che una libreria ORM aggiunge un sacco di complessita' e penalizza le prestazioni mentre la tua libreria personale no
    Magari sei il programmatore piu' bravo del mondo ed e' vero, pero' mi sembra poco saggio scartare a priori soluzioni che comunque sono abitualmente usate in produzione da progetti molto grandi
    nono, non voglio scartare a priori una libreria ORM, assolutamente, ogni tanto gli butto un occhio (come mi avete fatto fare in questi giorni ... anche se tempo ne ho poco e a parte scaricare doctrine2 e iniziare a guardare la doc non ho fatto)

    ma ci sono 3 punti fondamentali:
    - per mia politica personale, codice di terze parti non ne uso quando possibile (infatti uso quella cosa pesantissima di TCPDF ... avevo seriamente pensato di usare http://cairographics.org/cairo-php/ ma sono in beta ed ho lasciato perdere )
    - conosco a fondo il mio framework ed il mio sistema, implementare il supporto a doctrine, per quanto possa essere semplice in fondo, non è la mia priorità visto che ci sono cose più importanti, alcune da emergenza rossa (non le dico per non svergognarmi, ma non ho tempo di sistemarle )
    - rispetto agli strumenti che mi sono realizzato, quale vantaggio può REALMENTE darmi doctrine?

    La risposta all'ultima domanda è che, mentre sicuramente può darmi dei vantaggi, non so fino a che punto possa veramente avvantaggiarmi visto che, vagamente, il mio sistema per mappare il database agli oggetti (mi permetto di chiamarlo così anche se è improprio) mi gestisce le situazioni che fino ad oggi ho incontrato (e ti assicuro che sono state veramente le più variegate)
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #54
    Originariamente inviato da daniele_dll
    e per carità, sono perfettamente d'accordo, ma il problema è che se il brower impiega 400ms a renderizzare tutto e poi la pagina impiega 2 secondi per rispondere ... evidentemente è meglio iniziare ad ottimizzare il backend
    Sarei d'accordo se davvero esistesse questa differenza di 2 secondi, cosa che assolutamente non e'.

    Originariamente inviato da daniele_dll
    se posso ricercare strutture alternative, che magari non sono semplici semplici come un ORM, ma sono comunque semplici in modo accettabile ma nel contempo mi forniscano performance considerevolmente superiori, perché non dovrei farlo?
    Ripeto, il fatto che librerie ORM forniscano performance "considerevolmente inferiori" e' una leggenda, a meno di casi limite creati apposta per dimostrare una tesi con benchmark appositi. Se hai dati concreti su questa considerevole differenza sono curioso di analizzarli.

    Originariamente inviato da daniele_dll
    e siamo perfettamente d'accordo, ma non ho fatto altro che trovare una via di mezzo tra i tempi di esecuzione e la comodità di sviluppo

    indubbiamente utilizzare un ORM di terze parti si butta esclusivamente sulla comodità di sviluppo, io ho preferito perderci un po in questo punto e trovare una via di mezzo
    Ma come fai a sapere quanto ci hai perso o guadagnato se un ORM non l'hai mai usato?

    Originariamente inviato da daniele_dll
    definirla follia è assurdo e sbagliato e si basa su dei preconcetti che non capisco

    hai mai guardato il sorgente dell'estensione mysql di php? non è altro che un'interfacciamento (quasi) 1 ad 1 delle funzioni esposte dalla libreria nativa di mysql (o mysqlnd) stessa

    se su questo costruisco il mio layer di astrazione, che vantaggio concreto mi da PDO? fa la stessa cosa che faccio io solo che lui la fa direttamente in C nell'estensione?
    Ma a parte quello non mi da nessun vantaggio concreto, in quanto le posso reimplementare nel mio layer di estrazione.
    Ti stai palesemente contraddicendo. Da un lato dici di preferire le funzioni mysql_* perche' sono un accesso diretto senza sovrastrutture, dall'altro rifiuti PDO che implementa direttamente le cose che tu devi fare con una sovrastruttura in PHP. Anche qui credo che per la questione delle performance stiamo rasentando la paranoia, mi piacerebbe vedere dei dati a supporto.

    Originariamente inviato da daniele_dll
    detto questo, personalmente non faccio uso dei prepared statement perché il loro vantaggio principale, tutto sommato, è quando lanci molte volte la stessa query ma non lancio mai 2 query di select uguali, e per le query di insert (che uso in particolari condizioni anche per gli update di massa) utilizzo l'on duplicate key insieme all'inserimento multiplo di valori
    Il principale vantaggio dei PS e' la totale e assoluta protezione da injection, senza bisogno di manipolare le stringhe per (cercare di) creare query sicure. La protezione fornita dai prepared statements non e' aggirabile. Inoltre permettono l'esecuzione di query con valori multipli (come quella che citi) in maniera molto piu' logica e comoda che creare interminabili stringhe con serie di VALUES.


    Originariamente inviato da daniele_dll
    nono, non voglio scartare a priori una libreria ORM, assolutamente, ogni tanto gli butto un occhio (come mi avete fatto fare in questi giorni ... anche se tempo ne ho poco e a parte scaricare doctrine2 e iniziare a guardare la doc non ho fatto)
    Secondo me per farti una vera idea dovresti provare ad usare queste librerie davvero, scrivendoci del codice e facendo dei test. E' evidente che non ti e' chiaro come funzionano davvero (e non tutto si puo' capire da un rapido sguardo - magari prevenuto - alla documentazione).

    Originariamente inviato da daniele_dll
    ma ci sono 3 punti fondamentali:
    - per mia politica personale, codice di terze parti non ne uso quando possibile (infatti uso quella cosa pesantissima di TCPDF ... avevo seriamente pensato di usare http://cairographics.org/cairo-php/ ma sono in beta ed ho lasciato perdere )
    Questo ritengo che sia un grosso difetto per un programmatore. Utilizzare librerie di qualita' migliora il tuo lavoro rendendolo piu' semplice e spesso piu' sicuro (puoi fare quanta attenzione vuoi, ma e' difficile competere con migliaia di utenti che usano un software in quanto a bug hunting e test), scartare softare di terze parti per principio mi sembra una scelta estremamente discutibile.

    Originariamente inviato da daniele_dll
    - conosco a fondo il mio framework ed il mio sistema, implementare il supporto a doctrine, per quanto possa essere semplice in fondo, non è la mia priorità visto che ci sono cose più importanti, alcune da emergenza rossa (non le dico per non svergognarmi, ma non ho tempo di sistemarle )
    - rispetto agli strumenti che mi sono realizzato, quale vantaggio può REALMENTE darmi doctrine?

    La risposta all'ultima domanda è che, mentre sicuramente può darmi dei vantaggi, non so fino a che punto possa veramente avvantaggiarmi visto che, vagamente, il mio sistema per mappare il database agli oggetti (mi permetto di chiamarlo così anche se è improprio) mi gestisce le situazioni che fino ad oggi ho incontrato (e ti assicuro che sono state veramente le più variegate)
    Questo chiaramente io non te lo so dire, pero' molto spesso non ti accorgi dell'utilita' di una cosa finche' non la provi

  5. #55
    Originariamente inviato da k.b
    Ripeto, il fatto che librerie ORM forniscano performance "considerevolmente inferiori" e' una leggenda, a meno di casi limite creati apposta per dimostrare una tesi con benchmark appositi. Se hai dati concreti su questa considerevole differenza sono curioso di analizzarli.
    effettivamente con "considerevolmente superiori" ho esagerato, ma si tratta comunque di svariati layer che svolgono le proprie operazioni

    Ma come fai a sapere quanto ci hai perso o guadagnato se un ORM (di recente) non l'hai mai usato?
    verissimo, infatti ho scaricato doctrine 2 e voglio rendermi conto della situazione attuale, ma non è una cosa che farò nell'immediato in quanto sono infinitamente incasinato e in questi giorni, più di dare uno sguardo alla documentazione non posso fare

    Ti stai palesemente contraddicendo. Da un lato dici di preferire le funzioni mysql_* perche' sono un accesso diretto senza sovrastrutture, dall'altro rifiuti PDO che implementa direttamente le cose che tu devi fare con una sovrastruttura in PHP. Anche qui credo che per la questione delle performance stiamo rasentando la paranoia, mi piacerebbe vedere dei dati a supporto.
    effettivamente per come ho scritto la frase :lol:

    se dovessi reimplementare le funzionalità presenti nel mio layer di astrazione sopra PDO ovviamente avrei delle perdite ovviamente

    riguardo alle perfomance, a fine thread

    Il principale vantaggio dei PS e' la totale e assoluta protezione da injection, senza bisogno di manipolare le stringhe per (cercare di) creare query sicure. La protezione fornita dai prepared statements non e' aggirabile. Inoltre permettono l'esecuzione di query con valori multipli (come quella che citi) in maniera molto piu' logica e comoda che creare interminabili stringhe con serie di VALUES.
    quando mi sono realizzato il mio framework, pdo era tutt'altro che stabile e mysqli era (e non so ancora se lo è) stabile

    oggi, sicuramente, i prepared statement lato server sono più efficenti e sensati, ma considera che solo da mysql 5.1.21 è stato implementato il supporto alla cache delle query il che significa che le performance erano MOLTO inferiori (la cache delle query era circa 2.25/2.5 più veloce, ovviamente, dei prepared statement)

    Il che significa che ci vuole una release di MySQL 5.1 per usare la cache delle query con i prepared statement, sicuramente, comune ai giorni nostri ma non così tanto fino ad un annetto e mezzo fa (la stabile di mysql 5.1 se non ricordo male è uscita tra il terzo ed il quarto trimestre del 2009, un annetto almeno prima che i provider facessero l'upgrade, quindi diciamo intorno al terzo/quarto trimestre del 2010)

    Secondo me per farti una vera idea dovresti provare ad usare queste librerie davvero, scrivendoci del codice e facendo dei test. E' evidente che non ti e' chiaro come funzionano davvero (e non tutto si puo' capire da un rapido sguardo - magari prevenuto - alla documentazione).
    sono pienamente d'accordo, ma come ho detto prima non ho tempo per adesso, se ne parla a fine mese

    PS: non sono "prevenuto" verso gli ORM, ma semplicemente non lo ritengo necessario ... poi magari sbaglio ^^

    Questo ritengo che sia un grosso difetto per un programmatore. Utilizzare librerie di qualita' migliora il tuo lavoro rendendolo piu' semplice e spesso piu' sicuro (puoi fare quanta attenzione vuoi, ma e' difficile competere con migliaia di utenti che usano un software in quanto a bug hunting e test), scartare softare di terze parti per principio mi sembra una scelta estremamente discutibile.
    il problema sta proprio nell'identificare le librerie di qualità!

    utilizzare in un progetto un software come doctrine richiede poter stare tranquilli (ovvero tipo, almeno, un paio mesi dopo l'uscita di un paio di minor release dell'ultima versione stabile)

    in una condizione del genere (quindi con una versione 1.2 stabile o con una versione 2.2 stabile) mi metterei a studiarlo ed utilizzarlo felicemente se mi rendo conto che può essere un vantaggio ma, altrimenti, preferisco spendere del tempo per realizzarmi degli strumenti che magari non useranno i prepared statement o non useranno altre features più recenti, ma sono stabili ed efficenti

    ovviamente tutto va aggiornato, magari quando darò una spolverata al mio framework potrei aggiungere doctrine, ma è una cosa che richiederà tempo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  6. #56
    devo creare un software gestionale che mi permetta di gestire le giacenze in magazzino e utilizzarlo non solo su pc ma anche su tablet e smartphone.Ho trovato diversi link e questo mi sembrava molto interessante http://www.mokoapps.it/applicazione-...nzioni-15.html che ne pensate?

    ringrazio per i consigli che mi darete.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.