Domanda

Quale è meglio?O uso e / O mapper con SP?Se si dispone di un sistema con SP già, è un mapper ne vale la pena?

È stato utile?

Soluzione

Mi piace ORM perché non c'è bisogno di reinventare la ruota.Detto questo, dipende completamente alle esigenze dell'applicazione, stile di sviluppo e il team.

Questa domanda è già stata coperta Perché con parametri SQL generato da NHibernate solo veloce come una stored procedure?

Altri suggerimenti

Non c'è niente di buono da dire su di stored procedure.C'erano una necessità per 10 anni fa, ma ogni singolo vantaggio di utilizzare sprocs non è più valido.I due più comuni di argomenti riguardanti la sicurezza e le prestazioni."Invio di roba oltre il filo" di merda non sono titolari, di certo posso creare una query dinamicamente a fare tutto sul server.Una cosa la stored procedure sostenitori non dirvi è che rende gli aggiornamenti impossibile se si sta utilizzando la colonna di risoluzione dei conflitti in una pubblicazione di tipo merge.Solo gli amministratori di database che pensano di essere i database overlord insistere su sprocs perché rende il loro lavoro più imponente di quello che realmente è.

Questo è stato discusso a lungo sulle domande precedenti.

Quali sono i pro e i contro per mantenere SQL Stored Procedure rispetto a Codice

Nel mio lavoro, noi per lo più non di linea di applicazioni business - contratto di lavoro.

Per questo tipo di business, io sono un grande fan di ORM.Circa quattro anni fa (quando l'ORM strumenti sono meno maturi) abbiamo studiato CSLA e laminati nostra semplificato ORM strumento che usiamo nella maggior parte delle applicazioni,tra cui alcune di classe enterprise, sistemi che hanno 100+ tabelle.

Si stima che questo approccio (che ovviamente comprende un sacco di generazione del codice) crea un risparmio fino al 30% nei nostri progetti.Scherzi a parte, è ridicolo.

C'è un piccolo compromesso, ma è inconsistente, finché si dispone di una discreta conoscenza del software di sviluppo.Ci sono sempre le eccezioni che richiedono flessibilità.

Per esempio, estremamente intensivo di dati operazioni batch deve ancora essere trattati in specializzati sprocs se possibile.Probabilmente non si desidera inviare 100.000 enorme record sopra il filo se si potesse fare in una stored procedure destro sul database.

Questo è il tipo di problema che i nuovi sviluppatori di eseguire in se utilizzano ORM o non.Basta vedere i risultati e se sono competenti, essi avranno.

Quello che abbiamo visto nella nostra web app è che di solito il più difficile da risolvere i problemi di prestazioni sono più correlati al database anche con ORM.Piuttosto, tey sta sul front-end (browser) a causa della larghezza di banda, AJAX sovraccarico, etc.Anche mid-gamma di server di database che sono incredibilmente potenti in questi giorni.

Naturalmente, altri negozi che lavorano molto più alta domanda di sistemi possono avere diverse esperienze.:)

Le Stored procedure giù le mani.O Mappatori sono specifici di una lingua, e spesso di aggiungere grafica di rallentamenti.

Le Stored procedure significa che non è limitato dalla lingua di interfaccia, e si può semplicemente aggiungere nuove interfacce per il database in avanti compatibile modi.

Il mio personale parere O Mappatori è la loro esistenza evidenzia un difetto di progettazione del popolare struttura del database.Gli sviluppatori di Database dovrebbe realizzare l'attività di persone stanno cercando di raggiungere con il complicato O-Mapper e creare server-side utilità che aiutano nello svolgimento di questo compito.

O Mappatori sono anche epic obiettivi di "leaky astrazione" (sindrome Joel On Software:Perde Astrazioni )

Dove è abbastanza facile trovare cose appena riesco a gestire a causa del livello di astrazione non essere psichico.

Le Stored procedure sono migliori, a mio avviso, perché si può avere di sicurezza indipendente di configurazione delle tabelle sottostanti.

Questo significa che si può permettere di operazioni specifiche, senza permettere scrive/legge a specifiche tabelle.Inoltre, limita i danni che le persone possono fare, se scoprono un SQL injection sfruttare.

Sicuramente Orm.Più flessibile, più portatile (in genere tendono ad avere la portabilità integrato).In caso di morosità, si potrebbe voler utilizzare la cache o a mano sintonizzati SQL in punti caldi.

Generalmente le stored procedure sono diversi problemi con la gestione.

  • separato dall'applicazione (tanti cambiamenti sono ora essere fatto in due posti)
  • di solito è più difficile cambiare
  • più difficile la messa sotto controllo di versione
  • più difficile per assicurarsi che siano aggiornati (problemi di distribuzione)
  • la portabilità (già citato)

Personalmente ho trovato che SP tendono ad essere più veloce in termini di prestazioni, almeno per i grandi elementi di dati che eseguo regolarmente.Ma conosco molte persone che giurano da O strumenti e non fare NIENTE altro.

Direi che l'utilizzo di una O mapper volontà di migliorare la leggibilità e manutenibilità del vostro codice sorgente di applicazioni, mentre l'utilizzo di SP si aumentano le prestazioni dell'applicazione.

Essi sono in realtà non si escludono a vicenda, anche se per il tuo punto di solito sono così.

Il vantaggio dell'uso di Object Relational mapping è che si può scambiare dati di fonti.Non solo la struttura del database, ma è possibile utilizzare qualsiasi fonte di dati.Con l'avvento di servizi web / Service-oriented architecture / ESB, in una società più grande, sarebbe saggio considerare avere un elevato livello di separazione delle preoccupazioni di quello che si potrebbe ottenere in stored procedure.Tuttavia, le piccole imprese e nell'applicazione che non potrà mai utilizzare un'origine dati diversa, poi la SP può misura la fattura bene.E un ultimo punto, non è necessario utilizzare una O mapper per ottenere l'astrazione.La mia ex squadra ha avuto grande successo, semplicemente utilizzando un modello di scheda di utilizzo Spring.NET collegare la sorgente di dati.

@ Kent Federico

Il mio personale parere O Mappatori è la loro esistenza evidenzia un difetto di progettazione del popolare struttura del database"

Penso che si sta parlando, la differenza tra il modello relazionale e modello object oriented.Questo è in realtà, perché abbiamo bisogno di Orm, ma le implementazioni di questi modelli sono stati fatti su scopo - non è un flusso di progettazione - si tratta solo di come sono andate le cose per essere storicamente.

Utilizzare le stored procedure in cui è stato identificato un collo di bottiglia delle prestazioni.se non hai identificato un collo di bottiglia, che cosa stai facendo con l'ottimizzazione?
Utilizzare le stored procedure in cui si sono preoccupati per la sicurezza di accedere a una determinata tabella.
Utilizzare stored procedure quando si dispone di un database di SQL guidata, che è pronto a sedersi e scrittura di query complesse che si uniscono insieme un sacco di tabelle in un database legacy - per fare le cose che sono difficili in una O mapper.

Usare i mapper per gli altri (almeno) l ' 80% del database:dove la selezione e aggiornamenti sono così di routine per rendere l'accesso tramite stored procedure da solo un inutile esercizio nel manuale di codifica, e in cui gli aggiornamenti sono così rari che non vi è alcun costo in termini di prestazioni.Utilizzare una O mapper per automatizzare le cose facili.

Più O mappatori può parlare di stored procedure per il resto.

Non si deve usare stored procedure supponendo che sei più veloce di una istruzione sql in una stringa, questo non è necessariamente il caso nelle ultime versioni di MS SQL server.

Non è necessario utilizzare stored procedure per contrastare attacchi di tipo SQL injection, ci sono altri modi per assicurarsi che i vostri parametri di query sono fortemente tipizzati e non solo la stringa concatenata.

Non è necessario utilizzare una O mapper per ottenere un POCO del modello di dominio, ma non aiutano.

Se si dispone già di dati API che si è esposto come sprocs, avresti bisogno di giustificare un'importante revisione architettonica per andare a ORM.

Per un verde-campi di costruire, mi piacerebbe valutare diverse cose:

  1. Se c'è un dedicato DBA su la squadra, io magra per sprocs
  2. Se c'è più di una domanda di toccare lo stesso DB io magra per sprocs
  3. Se non c'è la possibilità di migrazione del database sempre, io magra per sprocs
  4. Se sto cercando di implementare MVCC nel DB, io magra per sprocs
  5. Se io sono la distribuzione di questo come un prodotto potenzialmente più backend db (MySql, MSSql, Oracle), io magra a ORM
  6. Se mi trovo su una scadenza stretta, io magra di ORM, in quanto è un modo più veloce per creare il modello di dominio e di mantenere sincronizzati con il modello di dati (con appositi utensili).
  7. Se io mi sto esponendo lo stesso modello di dominio in più modi (web, app, web service, RIA client), io magra ORM come allora il modello di dati è nascosta dietro il mio ORM facciata, fare un solido modello di dominio è di più prezioso per me.

Per me la performance è un po ' un red herring;sospensione sembra non funzionare altrettanto bene o meglio di manualmente il codice SQL (a causa della cache livelli), ed è facile scrivere una query non valida nel tuo stored procedure in entrambi i modi.

I criteri più importanti sono probabilmente la squadra e competenze specifiche a lungo termine la portabilità del database esigenze.

Bene le SP sono già lì.Non ha senso per può davvero.Credo che non ha senso usare un mapper con SP?

"Sto cercando di guidare un chiodo.Devo usare il tacco della mia scarpa o una bottiglia di vetro?"

Entrambe le Stored Procedure e Orm difficile e fastidioso da utilizzare per uno sviluppatore (anche se non necessariamente per un DBA o architetto, rispettivamente), in quanto non incorrere in costi di start-up e di maggiori costi di manutenzione che non è garanzia di un pay-off.

Entrambi pagano bene se i requisiti non dovrebbe cambiare molto durante il ciclo di vita del sistema, ma non ottiene nel vostro senso, se si sta costruendo il sistema per scoprire i requisiti, in primo luogo.

Dritto codifica SQL o quasi-ORM come LINQ e ActiveRecord è meglio per costruire-per-scoprire i progetti (che si verificano in azienda molto di più che il PR si vuole pensare).

Le Stored Procedure sono meglio in una lingua indipendente di ambiente, o dove il controllo capillare delle autorizzazioni è necessario.Sono anche meglio se il DBA è meglio cogliere le esigenze che il vostro programmatori.

Conclamata Orm sono meglio se si fa un progetto molto Grande Anteriore, utilizzare un sacco di UML, desidera abstract il database back-end, e l'architetto ha una migliore comprensione delle esigenze di sia il DBA o programmatori.

E poi c'è l'opzione #4:Utilizzare tutti loro.Un intero sistema, di solito non è solo un programma, e mentre molti programmi possono parlare lo stesso database, ognuno potrebbe utilizzare qualsiasi metodo è adatto sia per il programma specifico di attività, e per il suo livello di maturità.Che è:si inizia con il dritto codifica SQL o LINQ, poi maturo il programma di refactoring in ORM e Stored Procedure in cui si vede che ha senso.

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