Quanto profondamente il programmatore dovrebbe conoscere i componenti interni del motore di database? [chiuso]

4

Sto imparando SQL Server 2012 insieme a C #. In passato, ho preso lezioni di database al college, e ho una buona padronanza del linguaggio SQL e posso scrivere query. Tuttavia, esaminando la documentazione di SQL Server (o Oracle), sembra che il motore DB (insieme a tutte le tecnologie fornite con esso) sia estremamente complesso e richieda tempo e sforzi significativi per apprendere.

Oltre a scrivere query SQL, quanto deve conoscere a fondo il programmatore sui componenti interni del motore di database?

    
posta newprint 15.03.2014 - 08:15
fonte

2 risposte

17

Senza una buona conoscenza degli interni del database, sei obbligato ad abusarne.

Scrivere SQL che gira, e fa il suo lavoro, ma senza creare l'indice corretto nel database potrebbe funzionare in fase di sviluppo, ma funziona molto male nella produzione, uccidendo efficacemente il tuo database e causando strozzature.

Identificare un collo di bottiglia di per sé ha bisogno di una persona esperta, dal momento che potresti (falsamente) dire - beh, ho raggiunto la capacità del mio server DB, ho solo bisogno di adattarlo ... che si traduce in perdita di denaro ed è una soluzione a brevissimo termine.

Le prestazioni non sono l'unico problema che può sorgere - la sicurezza è un problema principale che potrebbe non essere evidente allo sviluppatore ingenuo - Mappatura O / R e altri framework realizzati SQL-injection e altri attacchi ai database meno diffusi, ma non essere consapevoli della loro esistenza potrebbe aprire la tua applicazione a attacchi molto cattivi.

I progetti orientati al DB su larga scala spesso hanno un DBA a tempo pieno, il cui compito è di lavorare con l'architetto di sistema sullo schema del database, guidare gli sviluppatori e analizzare tutte le query, correggerle o aggiungere indici laddove necessario.

Nei progetti più piccoli, una squadra potrebbe dipendere dalla competenza del proprio sviluppatore per questo. Ciò significa che dovresti essere in grado di comprendere le principali linee guida e avvertimenti per l'utilizzo e l'uso improprio del tuo database.

Se lavori in un team, potresti voler dipendere da un membro del team che è più esperto nell'arena del database di te e fargli rivedere le tue query SQL e aiutarti a progettarle.

Gli sviluppatori oggi dovrebbero conoscere intimamente molte tecnologie, da SQL, noSQL, OS, Web Engine, Mobile, ecc. ed è relativamente facile ottenere un prototipo funzionante in ognuna di queste per dare a uno sviluppatore l'illusione di competenza, fino a quando lo stesso codice si trova di fronte all'ambiente di produzione, dove viene rivelata la vera complessità della tecnologia ... è meglio essere preparati!

    
risposta data 15.03.2014 - 08:42
fonte
9

Quanto profondamente hai tempo. Al giorno d'oggi ci sono un sacco di cose inutili sull'essere "database agnostici", ma a meno che non ti piaccia l'idea delle caratteristiche del minimo comune denominatore che definiscono i tuoi migliori sforzi, devi sapere come funziona il tuo database. Otterrai risultati migliori su progetti non banali se decidi di rendere agnostico lo schema e l'applicazione del database anziché andare nella direzione opposta.

L'ultima frase del paragrafo precedente vola di fronte a quasi tutte le conoscenze comuni sul Web 2.0. Vale la pena decidere dove il tuo progetto ricade sul continuum "Better is Better" VS "Worse is Better".

Ma questo non significa che dovresti solo scegliere un database per conoscere, e quello che voglio dire è che non dovresti solo imparare un paradigma di dati. Mentre gli schemi relazionali completamente normalizzati sono la soluzione migliore per comprendere a fondo i dati, non sono fattibili per molte applicazioni pratiche (ma costituiscono un eccellente archivio di dati permanente da cui è possibile creare magazzini ad alta velocità su misura per query specifiche in seguito, se avere le risorse). Uno schema relazionale denigrato deliberatamente di solito è la tua spina dorsale, ma spesso hai bisogno anche di un database di grafici e - tanto importante quanto lo schema relazionale normalizzato - avrai probabilmente bisogno di sviluppare uno schema di serializzazione (pensa lungo le righe di ASN.1 o YAML, non XML, btw - dati, non documenti). Se si eseguono dati geografici o spaziali, anche un archivio dati specializzato GIS può diventare rapidamente un must. I database di documenti possono anche diventare necessari se ti rendi conto che un giorno quello che stai facendo (o, più realisticamente, un aspetto pesantemente caricato di quello che stai facendo) è in realtà l'archiviazione dei documenti e non la memorizzazione dei record.

Detto questo, dovrai capire a sufficienza su ciascuno di essi per scrivere un livello di integrità intra-db (che può essere asincrono, quindi non farti prendere dal panico) affinché non si comprendano a vicenda. Questo richiede sapere come funzionano i DB.

Sembra molto da sapere, ma solo perché lo è. I dati sono semplicemente così importanti. Certo, puoi essere come i ragazzi del Web 2.0 e trascinarti dietro ... fino a quando non hai trovato un'idea davvero nuova e all'improvviso ti rendi conto che non riesci praticamente ad attuare la tua bella idea. Le unità di dati usano, non il contrario, e in questi giorni la sua deriva sempre più breve. Non essere la prossima persona che ha salvato alcune settimane facendo un genuino studio sulla modellazione dei dati (in tutte le sue forme) solo per trascorrere una vita a reinventare un sistema di gestione dei dati che vive solo all'interno del tuo progetto one-off.

Mi è voluto molto tempo per venire a questa opinione, e la mia evoluzione è stata lenta. Non avevo bisogno di tutta questa conoscenza in una volta; comprendere i dati in un modo più completo ha avuto come effetto collaterale di interagire con aspetti più interessanti dei problemi emersi nel tempo mentre lavoravo. (In particolare, nel processo di scrittura di tre grandi sistemi di simulazione aziendale da solo.)

EDIT: Vale la pena ricordare che la ragione per cui ho menzionato in modo speciale il modello relazionale è che è possibile simulare qualsiasi altro modello di dati con dati relazionali, ma non è necessariamente possibile simulare ogni altro modello di dati da tutti gli altri . La relazione normalizzata è la più generale e quindi il punto di partenza per imparare come funzionano i database e i modelli di dati (e queste sono idee correlate con buoni database come Postgres, DB2 e Oracle). Ma la pura relazione relazionale normalizzata a volte può essere come cercare di costruire un grattacielo con un coltellino svizzero se aderito a un religioso. Questo è il motivo per cui dico che dovresti capire i tuoi dati in un modo relazionale completamente normalizzato, anche se potresti non implementarlo in questo modo (o persino in un database).

In termini pratici, se apprendi a fondo la teoria dei dati relazionali per prima cosa otterrai rapidamente i punti di forza e i compromessi inerenti ai sistemi non relazionali (per includere i sistemi di sapore della settimana) come CouchDB, AllegroGraph, ObjectDB, ecc. e esattamente dove le astrazioni ORM falliscono (IOW, saprai esattamente perché 1 classe! = 1 tavolo & 1 oggetto! = 1 riga (neanche lontanamente chiuso)) e apprenderai molte cose nuove sulla programmazione funzionale e imperativa come bene.

    
risposta data 15.03.2014 - 11:58
fonte

Leggi altre domande sui tag