Domanda

Io sono in lotta per mantenere l'utilizzo di stored procedure nella nostra società.Ci sono alcune persone che dicono che sono cattivo e non dobbiamo usarli.Stiamo usando DB2 su i-series.

Si prega di aiutare nel mio argomento per mantenere le stored procedure e vivo nella mia azienda.

È stato utile?

Soluzione

OK vengo a favore di stored procedure.

In primo luogo, se li si usa in esclusiva, fanno il refactoring del database molto più semplice di come è possibile utilizzare le dipendenze memorizzati nel database per scoprire che cosa potrebbe essere interessata da un cambiamento (bene in SQL Server in ogni caso, non si può parlare per gli altri datbases).

In secondo luogo, se è necessario modificare solo la query, sono molto più semplice da implementare.

Sono anche più facili da ottimizzare le prestazioni in quanto possono essere facilmente chiamati senza sparare l'applicazione.

Se si dispone di una logica complessa quindi risparmiare un po 'le prestazioni non dover inviare tutto ciò che attraverso la rete al server di database. Non può sembrare un grande guadagno, ma se il complesso query viene eseguita migliaia di volte al giorno, è possibile aggiungere fino.

La sicurezza è anche estremamente importante. Se non si utilizza le procedure di deposito, è necessario impostare i diritti a livello di tabella o vista. Questo apre il database per interno le frodi. Sì, le query con parametri riducono il rischio di SQL injection, ma che non è l'unica minaccia è necessario evitare. Se si dispone di dati personali o finanziari e non si utilizza stored procedure (e quelli con NO SQL dinamico) e di limitare agli utenti di solo essere in grado di fare le cose attraverso i procs, allora il sistema è in estremo pericolo da parte dei dipendenti interni che possono rubare dati o controlli interni di bypass per rubare denaro. Leggi controlli interni nelle principi contabili per capire perché questo è un problema.

ORM tendono anche a scrivere il codice solo decisamente male SQL soprattutto se la query è complessa. Inoltre, come la gente inizia a usarli al posto di stored procedure, ho trovato che le persone che non hanno mai usato stored procedure hanno una comprensione più poveri di come ottenere i dati dal database e spesso ottenere i dati sbagliati. L'utilizzo di un ORM è bene se si è già capito SQL e possibile determinare quando per riscrivere il codice generato automaticamente in qualcosa che funziona meglio. Ma troppi utenti non hanno la capacità di scrivere codice complesso perché non hanno mai imparato le basi.

Infine dal momento che si è già memorizzato procs per la vostra applicazione, sbarazzarsi di loro del tutto è un modo per introdurre nuovi bug becasue si doveva generare un nuovo codice.

Altri suggerimenti

Non hai intenzione di come questo, e sto probabilmente andando a ottenere downvoted nel dimenticatoio, ma io sono con il resto della vostra comapny.

stored procedure utilizzate per offrire molti vantaggi (sicurezza, prestazioni, ecc), ma con le query con parametri e una migliore ottimizzazione delle query, stored procedure in realtà solo aggiungere un altro strato di spese generali per l'applicazione e vi darà un altro luogo è necessario aggiornare / modificare codice.

Io preferisco tenere tutto in un unico posto in modo tale che quando ho bisogno di modificare il codice, posso andare in un posto e fare le mie modifiche lì.

Se volete maggiori dettagli sugli argomenti per allontanarsi da Prcoedures memorizzati, consulta questo articolo CodingHorror:

Horror Coding: Chi ha bisogno di stored procedure In ogni caso ?

... e ho appena notato che l'articolo è a partire dal 2004. Devo credere che i database sono migliorati da allora che significa che questo suonava ancora più vero oggi di quanto abbia fatto allora.

Fare tutto su JDBC significa essenzialmente che si inserisce un livello di rete tra l'utente e il database. Tutto sommato significa che i dati è più "a distanza" e vengono a te più lento. Le stored procedure possono lavorare direttamente sui dati all'interno del database, e la differenza di velocità con conseguente possono stupire.

Si prega di notare che è possibile scrivere stored procedure in tutte le lingue i IBM tra cui Java, nel caso in cui si tratta di una questione di abilità programmazioni. Inoltre, si ha accesso alla macchina pieno, non solo alcune parti interne del database. Qui l'AS / 400 è così molto diverso da qualsiasi altro prodotto di database, che le esperienze da altri database semplicemente - in il mio opinione -. Non si applica

mi sento di raccomandare le mailing list di fascia media in quanto hanno la più grande concentrazione di AS / 400 competenze di programmazione io sappia.

Questo è uno di quei Marmite problemi.se si sono principalmente un programmatore di database si pensi che stored procedure deve essere ampiamente utilizzato.Se sei un programmatore di applicazioni, ad esempio un Java o .Net coder - le probabilità sono voi direte che dovrebbero essere evitati completamente.

Non che questo soddisfi i programmatori di applicazioni desidera scrivere le proprie istruzioni SQL.No, in questi giorni tendono a voler astratto tutto dietro contorto ORM servizi.Questi non sono di più facile comprensione di stored procedure, ma sono disponibili all'interno dello stesso IDE, quindi hanno meno bisogno di commutazione di contesto.

Ci sono due grandi cose in favore di stored procedure.Il primo è che le persone che sanno PL/SQL sono probabilmente familiarità con i database Oracle (T-SQL e SQL Server, ecc), e che, quindi, tendono a scrivere meglio i programmi per il database (definiti come i programmi che si avvalgono della piattaforma caratteristiche e sono montati la sua funzionalità), rispetto a coloro che non.

La seconda cosa è che i dati persiste.Gli sviluppatori di applicazioni sono affezionato a parlare di "database indipendenza", ma ciò che conta davvero è applicazione indipendenza.Front-end vanno e vengono, ma il modello di dati dura per sempre.Negli ultimi dieci anni le applicazioni Java sono stati scritti come Applet, Servlet, Jsp, Tiles e le Facce, con add-ons in JavaScript, Groovy, AJAX e JSON, la connessione al database attraverso arrotolato a mano JDBC, EJB (v1,2,3), TopLink, IBatis, Hibernate e...perdonami se ho perso un paio di.Applicazioni la cui interfaccia utente è una pelle su uno strato di stored procedure sono più semplici da aggiornare per l'ultima e più grande di applicazioni in cui la logica di business deve essere ri-scritto ogni volta.E si esibiranno meglio troppo.

Tuttavia, nel lungo periodo, le applicazioni che interagiscono direttamente con i database sono probabilmente andando a morire.Tutto sta andando a parlare per il servizio di bus, e che deciderà dove ottenere i dati.Naturalmente, negozi in cui il database è esposto attraverso un ben progettato API di stored procedure possono trovare più facile per passare a questo coraggioso nuovo mondo di quei luoghi che si sta andando ad avere per estrarre tutto il loro ORM logica.

Sono utili quando si dispone di un insieme stratificato di applicazioni. Ad esempio, un singolo DB core con i servizi web che offrono le operazioni atomiche (che capita di essere memorizzati procedure) e di un ESB o di un insieme di applicazioni che consumano quelli WSS. In un caso singolo-app / single-db, l'idea è di mantenere il codice in un posto come gli altri hanno suggerito.

Ma bene, che sono solo io.

Io sono un lungo tempo di Java developer che ha recentemente imbattuto in diversi progetti che fatto grande uso di stored procedure che hanno permesso l'utilizzo di stored procedure in un brutto luce per me.

Detto questo, io sono riluttante a fare una dichiarazione coperta che le stored procedure sono male come un sistema di progettazione opzione, perché è vero che dipende dal progetto in questione e ciò che il particolare stored procedure sta cercando di realizzare.

La mia preferenza è per evitare qualsiasi tipo di stored procedure per semplici operazioni CRUD (può sembrare ridicolo per alcuni stored procedure di gestione di queste operazioni, ma ho incontrato diversi sistemi che stavano facendo questo) -- Questo finisce risultante in un sacco di codice di dover essere scritto (e testato e mantenuta) su Java lato per la gestione di queste chiamate di procedura da quello che ho osservato.E ' meglio usare la funzione di Ibernazione (o qualche altra libreria ORM) per gestire questi tipi di operazioni...se per nessun altro motivo che si tende a ridurre la quantità di codice necessario per essere mantenuto.Può anche causare problemi quando si cerca di effettuare il refactoring o apportare modifiche significative al sistema, non si tratta solo di avere a preoccuparsi di classe/modifiche della tabella, ma stored procedure che gestiscono CRUD ops, come bene.E questo può essere aggravato ulteriormente se sei in una situazione in cui gli sviluppatori non possono apportare modifiche al database di se stessi, o c'è qualche processo formale per cambiamenti di coordinate tra le due parti del sistema.

D'altra parte, avendo le stored procedure che richiedono un'interazione limitata con il codice Java (fondamentalmente, è solo a fuoco spento una chiamata a uno con un paio di argomenti), e l'esecuzione in un semi-autonomo che la moda non è una cosa terribile sia.Ho incontrato un paio di situazioni (in particolare, dove siamo stati la migrazione o l'importazione di dati in un sistema in cui utilizzare una stored procedure è stato molto meglio un percorso che per scrivere un sacco di codice Java per gestire le funzionalità.

Credo che la vera risposta sarebbe che si dovrebbe esaminare ciò che ogni negozio procedura il sistema sta facendo attualmente e valutare caso per caso per stabilire se forse è più facile gestire l'operazione in Java o il database.Alcuni possono funzionare anche meglio in Java (da ORM biblioteca, o scritti a mano codice), alcuni non possono.In entrambi i casi, l'obiettivo dovrebbe essere quello di assicurarsi che il sistema è comprensibile e di facile manutenzione per tutti, non solo se le stored procedure sono buoni o cattivi in sé e per sé.

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