Programmazione efficace della gestione / accesso al livello dati

1

Versione breve : qual è il termine / concetto che descrive la progettazione efficiente della programmazione del livello dati per un accesso efficiente ai dati e quali sono alcune fonti / libri / articoli / sito web che discutono di questo concetto?

Versione lunga : così ho avuto una recente conversazione con lo sviluppatore senior della mia piccola azienda su come e perché accediamo ai dati come facciamo noi. Mi ha detto che era l'aspetto più importante del programma e ha spiegato come è il più grande collo di bottiglia in termini di efficienza se fatto in modo errato. Ha anche detto di non averlo mai imparato dai corsi che ha seguito e non ne ha mai letto in nessun libro, nonostante il fatto che ritenga che sia la prima cosa che sceglie di insegnare agli altri.

Dovrei spiegare che questo è il mio primo anno di programmazione del lavoro, che ho una laurea in ingegneria elettronica, ma non in CS, quindi non saprei se fosse coperto a scuola. Inoltre, il linguaggio in cui lavoro è Java, ma questa domanda era intesa a chiedere informazioni sull'accesso ai dati da qualsiasi lingua in senso generale.

Quindi di cosa sto parlando? Spiegherò attraverso un esempio. Lavoriamo con molti dati, quindi il livello dati è un po 'complicato. Utilizza una combinazione di pattern singleton e pattern di progettazione di fabbrica per ottenere un accesso diverso.

Ad esempio, un oggetto, diciamo che il cliente verrà spesso istanziato come segue:

Customer customer = Customer.getDefaultInstance(CustomerAccessType.LIST) 

o

Customer customer = Customer.getDefaultInstance(CustomerAccessType.ONE_RECORD)

o

Customer customer = Customer.getDefaultInstance(CustomerAccessType.LIST_BY_ACCOUNT)

Come avrete già intuito, ogni tipo di accesso accede al database in un modo diverso. Il tipo di accesso LIST per la maggior parte del tempo ha pochissime colonne, quindi anche se sta acquisendo molte righe di dati, in alcuni casi fino a decine di migliaia di record (forse non con i clienti, ma forse qualcosa come ordini da un sito web che puoi immaginare che diventa molto grande), potrebbe contenere solo le chiavi primarie sul tavolo e alcune altre informazioni molto specifiche. Ma quando si modificano dati specifici a cui si accede usando il tipo "ONE_RECORD" e con una sola riga si hanno tutte le colonne della tabella (e molto probabilmente si unisce a molte altre tabelle).

Questo è più evidente che mai quando si guarda uno schermo che dipinge informazioni di fronte a cassieri e le informazioni cambiano costantemente. Le informazioni mostrate potrebbero provenire da una tabella che ha come già accennato, decine di migliaia di record su cui si sta lavorando. Un oggetto di tipo ELENCO catturerà solo le chiavi primarie dalla tabella, quindi solo i record che richiedono la pittura sono accessibili, una riga alla volta e le informazioni vengono dipinte sullo schermo.

Quindi ho due domande a seguito di tutto ciò:

  1. Qual è il termine / concetto che descrive la progettazione efficiente della programmazione del livello dati per un accesso efficiente ai dati? La maggior parte dei programmi di grandi dimensioni che devono gestire un sacco di accesso ai dati devono affrontare questi stessi problemi. Sicuramente altri hanno coniato un termine per questo?

  2. Quali sono alcune buone risorse per saperne di più su cos'altro è disponibile su questo argomento? Di nuovo, sicuramente altri hanno affrontato questi stessi problemi / colli di bottiglia con cui abbiamo a che fare. Sicuramente altre menti brillanti hanno affrontato il problema e scritto estesamente su di esso, no?

  3. Quali sono altri modi in cui forse la tua esperienza personale ti ha mostrato nell'affrontare questo problema, anche se non lo hai mai letto da nessun'altra parte?

Il tuo aiuto e la tua conoscenza sono molto apprezzati,

-Asaf

    
posta Asaf 25.04.2012 - 16:59
fonte

1 risposta

1

Mi è stato chiesto di scrivere lo stesso tipo di interfacce e questo è quello che mi è stato detto / imparato.
Credo che quello a cui ti riferisci sia il "livello database di un'applicazione".
Ho visto questo chiamato "Livello di accesso ai dati (di un'applicazione) anche:

link
link

1. Per avere un accesso efficiente ai dati

gli oggetti del database sottostante    essi stessi non devono avere problemi relativi alle prestazioni.    PER ESEMPIO. Se si utilizzano tabelle, le tabelle dovrebbero essere appropriate    indici, le statistiche sulle tabelle devono essere aggiornate,    e se non hai bisogno dei dati più recenti nella tabella,    è una buona idea prendere in considerazione l'utilizzo di viste materializzate.

Questo sembra ovvio, ma assicurati di avere accesso al database    stesso e il database non ha problemi di per sé,    PER ESEMPIO. troppe sessioni in sospeso, problemi di I / O, ecc.

2. Nel codice per l'accesso al database,

è una buona idea    evitare l'analisi e l'utilizzo di variabili di binding    ti aiuterà a evitare questo.

3. Se il lavoro è fatto nel tuo livello di accesso ai dati

consiste principalmente di transazioni di breve durata, potrebbe essere una buona idea    utilizzare il pool di connessioni. Ho

link

Non sono sicuro che la classe che stai usando funzionerà / sarà progettata per i pool di connessione ma se si sta utilizzando un oggetto Session (utilizzo di getDefaultInstance mi porta a credere che questa potrebbe essere una sessione oggetto) e lo stai utilizzando per Hibernate, quindi questo URL non viene visualizzato funzionerà con un pool di connessioni

link

Ho la sensazione che potresti usare un oggetto diverso: l'oggetto la documentazione dovrebbe indicare se utilizza / è compatibile con pool di connessioni

4. Questo URL afferma che getDefaultInstance creerà sempre

un nuovo oggetto e ci sono alternative. Non sono sicuro che sia così    quello che vuoi - è qualcosa da considerare

link

Ancora una volta mi scuso Non sono sicuro che questo documento sia effettivamente per il classe che stai usando - questa è solo la migliore ipotesi.

    
risposta data 26.04.2012 - 19:00
fonte

Leggi altre domande sui tag