Domanda

Sto citando parte di una risposta che ho ricevuto per un'altra mia domanda:

Nel mondo PHP/MySQL direi che le procedure memorizzate sono no-go

Mi piacerebbe sapere:È così?Perché?Perché no?

[modifica]Intendo questa come una domanda generale senza un'esigenza specifica in mente[/modifica]

È stato utile?

Soluzione

Sviluppo e mantengo una grande applicazione PHP/MySQL.Ecco la mia esperienza con le procedure memorizzate.

Nel corso del tempo la nostra applicazione è diventata molto complessa.E con tutta la logica lato php, alcune operazioni interrogherebbero il database con oltre 100 brevi query.

MySQL è così veloce che le prestazioni sono ancora accettabili, ma non eccezionali.

Nella nostra ultima versione del software abbiamo deciso di spostare parte della logica in procedure memorizzate per operazioni complesse.

Abbiamo ottenuto un significativo miglioramento delle prestazioni grazie al fatto che non abbiamo dovuto inviare dati avanti e indietro tra PHP e MySQL.

Sono d'accordo con gli altri poster qui sul fatto che PL/SQL non è un linguaggio moderno ed è difficile eseguire il debug.

Linea di fondo:Le procedure memorizzate sono un ottimo strumento per determinate situazioni.Ma non consiglierei di usarli a meno che tu non abbia una buona ragione.Per applicazioni semplici, le procedure memorizzate non valgono la pena.

Altri suggerimenti

Quando si utilizzano procedure memorizzate con MySQL, sarà spesso necessario utilizzare il file mysqli interfaccia in PHP e non quella normale mysql interfaccia.

La ragione di ciò è dovuta al fatto che le procedure memorizzate spesso restituiscono più di 1 set di risultati.In tal caso, l'API mysql non è in grado di gestirlo e verranno visualizzati errori.

L'interfaccia mysqli ha funzioni per gestire questi set di risultati multipli, funzioni come mysqli_more_results E mysqli_next_result.

Tieni presente che se restituisci un set di risultati dalla procedura memorizzata, devi utilizzare queste API, poiché la procedura memorizzata genera 1 set di risultati per l'esecuzione effettiva e quindi 1 aggiuntivo per ogni set di risultati restituito intenzionalmente da la procedura memorizzata.

In genere mi tengo lontano dalle procedure memorizzate perché aggiungono carico al database che è il 99% delle volte, il collo di bottiglia più grande.Aggiungere un nuovo server php non è nulla in confronto alla replica del tuo database MySQL.

Hai in mente un’esigenza specifica che ti porta a prenderli in considerazione?Le procedure memorizzate sono molto meno portabili dell'SQL "semplice", questo è solitamente il motivo per cui le persone non vogliono usarle.Inoltre, avendo scritto una buona parte di PL/SQL, devo dire che il modo procedurale di scrivere il codice aggiunge complessità e non è molto moderno o testabile.Potrebbero essere utili in alcuni casi speciali in cui è necessario ottimizzare, ma sicuramente ci penserei due volte.Jeff sì opinioni simili.

Questa è una domanda soggettiva.

Personalmente includerei tutti i calcoli all'interno di PHP e utilizzerei solo MySQL come tabella.

Ma se ritieni che sia più semplice utilizzare le procedure memorizzate, vai avanti e fallo.

Non direi che "le procedure memorizzate sono vietate", direi "Non usarle senza una buona ragione".

Le procedure memorizzate MySQL hanno una sintassi particolarmente orribile (anche Oracle e MSSQL sono piuttosto orribili), mantenerle complica semplicemente la tua applicazione.

Utilizza una procedura memorizzata se hai una ragione reale (misurabile) per farlo, altrimenti non farlo.Questa è comunque la mia opinione.

C'è forse una fobia delle procedure memorizzate con mysql, in parte a causa della sua scarsa potenza (rispetto a Postgresql e persino a MSSQL, le procedure memorizzate di mysql sono molto carenti).

In più:Rendono più semplice l'interfacciamento con esso da più di una lingua.

Se qualcuno afferma che "l'utilizzo di procedure memorizzate è negativo perché non è trasferibile su database diversi" allora questo ovviamente significa che pensano che probabilmente cambierai database, il che significa che a loro volta dicono che pensano che non dovresti usare mysql.

Al giorno d'oggi è popolare usare gli ORM, ma personalmente penso che l'ORM sia una brutta cosa (Domanda:82882)

Penso che l'uso delle procedure memorizzate possa offrire una certa astrazione in alcune applicazioni, come in qualsiasi altra applicazione in cui si utilizza lo stesso pezzo di codice SQL per aggiornare o aggiungere gli stessi dati, è possibile quindi creare l'unico sproc save_user($attr..... ) piuttosto che ripetersi ovunque.

D'accordo, la sintassi è pelosa e se sei abituato a MSSQL e Oracle sprocs ci sono differenze che possono frustrare.

Dovresti anche essere consapevole che le procedure memorizzate non erano supportate in Mysql prima della versione 5.0. http://dev.mysql.com/doc/refman/5.0/en/stored-routines.html Anche le procedure memorizzate tendevano ad essere un po' strane in quell'implementazione.Ora che Mysql 5.1 sta iniziando a diffondersi, vedo un maggiore utilizzo delle procedure memorizzate con Mysql.

Faccio un uso limitato delle procedure memorizzate e funziona bene.Sono lo sviluppatore principale di una delle mie aziende clienti e lavoro sul loro sito Web di e-comm.Il cliente ha un sistema azionario, abbiamo implementato una serie di procedure memorizzate sul suo sistema e creato un'API per comunicare con esso.Ciò ci ha permesso di astrarre il loro database e di implementare la logica nelle procedure memorizzate.Semplice ma soddisfaceva molto bene le esigenze aziendali.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top