Consiglio sulla gestione di tabelle storiche

venerdì 20 febbraio 2015 - 11.39
Tag Elenco Tags  VB.NET

trinity Profilo | Guru

Salve,
sto creando un progetto in asp net con database sql server 2012 e tale progetto che include ricerche, visualizzazione e stampe dei dati, avrà una tabella movimenti nella quale circa 10.000 utenti ogni giorno o quasi (ovviamente non tutti insieme dipende se ci sono dati da inserire) andranno a registrare i loro dati in questa tabella. Adesso per un discorso di gestione dati in tale tabella l'anno in lavorazione e l'anno precedente ci devono per forza essere, poi dal secondo anno passato in poi andando indietro nel tempo pensavo di creare un'altro database solo per tenere una tabella storico movimenti oppure semplicemente creare una tabella storico (la quale verrà utilizzata rare volte tra parentesi).
Adesso dato che devo spesso eseguire delle ricerche e delle stampe su più anni ed quindi dovrebbero essere presi anche i movimenti che andranno a finire nello storico, avrei bisogno di un vostro consiglio.

Punto 1, per lo storico mi consigliate di create un database a parte per evitare di rendere il database di lavorazione pesante e grande ( ovviamente non ci sono problemi di spazio sul disco ho un serve dedicato al progetto.)? Oppure creo semplicemente un tabella storico nel database di lavorazione?

punto 2 supponiamo che creo una tabella storico movimenti, come si fa in una query di selezione a prendere sia i dati della tabella movimenti che si sta utilizzando sia i dati della tabella storico e far uscire un unico result di dati?

Grazie ciao
Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>Salve,
ciao

>Punto 1, per lo storico mi consigliate di create un database
>a parte per evitare di rendere il database di lavorazione pesante
>e grande ( ovviamente non ci sono problemi di spazio sul disco
>ho un serve dedicato al progetto.)? Oppure creo semplicemente
>un tabella storico nel database di lavorazione?
Ci sono tante soluzioni per approcciare a questo tipo di problema. Dipende anche dall'edizione di SQL Server che hai.
Ad esempio, con l'enterprise puoi fare il partizionamento dei dati, andando, di fatto, a creare file group differenti per scalare l'accesso su altri dischi.
O ancora, sempre con l'enterprise, puoi pensare ad una AlwaysOn.
Nel caso in cui non disponi di questa edizione, puoi pensare di fare un altro database destinazione di una replica transazionale.
O ancora, come dici tu, semplcimente un'altra tabella salvata su di un altro disco però.
Puoi pensare di fare anche log shipping e mirror, ma per solo una tabella io sarei per replicare transazionalmente i dati e tenerli in un posto sicuro per anno.
Ogni anno crei una tabella nuova e vai a spostare il processo di replica verso la nuova tabella.
In alternativa, se la replica non fa al caso tuo, puoi creare un SSIS che ogni x tempo vada a caricare i dati in un altro database (o tabella, ma db è più chiaro e comodo).
Avendo poi un database esterno, potrai fare anche più semplicemente della BI.

>punto 2 supponiamo che creo una tabella storico movimenti, come
>si fa in una query di selezione a prendere sia i dati della tabella
>movimenti che si sta utilizzando sia i dati della tabella storico
>e far uscire un unico result di dati?
Se replichi il problema non si pone, ci sono tutti, per quell'anno. Se devi fare query cross anno, allora dovrai fare una sorta di federazione, usando una vista su di un server centrale mettendo in union le tabelle di ogni anno ed interrogando la vista con il range di dati che ti serve (dovrai aggiungere un marker per l'anno di corrispondenza in modo da definire cosa interrogare). La vista si occuperà di andare a toccare SOLO le tabelle che effettivamente vengono coinvolte dalla ricerca.

>Grazie ciao
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

trinity Profilo | Guru

>>Salve,
>ciao
ciao Ale purtroppo da questo punto di vista sotto questo aspetto in sql non sn molto ferrato per questo ho scritto tale post per farmi dare mano.
Calcolando che posso avere max sql server 2012 professional
Vorrei capire queste due punti.

Prima di tutto il passaggio di dati dalla tabella in lavorazione alla tabella storico viene eseguito solo dagli operatori dell'azienda che gestisci le utente e viene eseguito ogni anno, lasciando però sempre due anni a confronto nella tabella di lavorazione.
Te mi consigli di creare un database a parte con questa tabella storico e non ci sono problemi ed in più avere questo database su un disco differente a quello del database in lavorazione, perchè?
Poi comunque se se non errore dato che le query di selezione sono le stesse sia se dovessi applicarle sul database in lavorazione sia su quello storico, se gestisco tutto le query via code behind (in riferimento all'altro mio post a cui mi hai risposto) a questo punto potrei anche avere due connectionstring diverse e quella che si riferisce allo storico attivarla solo se l'utente ha bisogno di gestire i dati dallo storico. A questo punto, se si può, eseguire, per esempio, una query di selezione sulla tabella movimenti e un'altra selezione sulla tabella storico e via code behind gestire i dati e unirli per far uscire un unico risultato. E' sbagliata questa idea o fattibile?
Altrimenti dimmi te se c'è una procedura semplice da adottare e capire.

>>Punto 1, per lo storico mi consigliate di create un database
>>a parte per evitare di rendere il database di lavorazione pesante
>>e grande ( ovviamente non ci sono problemi di spazio sul disco
>>ho un serve dedicato al progetto.)? Oppure creo semplicemente
>>un tabella storico nel database di lavorazione?
>Ci sono tante soluzioni per approcciare a questo tipo di problema.
>Dipende anche dall'edizione di SQL Server che hai.
>Ad esempio, con l'enterprise puoi fare il partizionamento dei
>dati, andando, di fatto, a creare file group differenti per scalare
>l'accesso su altri dischi.
>O ancora, sempre con l'enterprise, puoi pensare ad una AlwaysOn.
>Nel caso in cui non disponi di questa edizione, puoi pensare
>di fare un altro database destinazione di una replica transazionale.
>O ancora, come dici tu, semplcimente un'altra tabella salvata
>su di un altro disco però.
>Puoi pensare di fare anche log shipping e mirror, ma per solo
>una tabella io sarei per replicare transazionalmente i dati e
>tenerli in un posto sicuro per anno.
>Ogni anno crei una tabella nuova e vai a spostare il processo
>di replica verso la nuova tabella.
>In alternativa, se la replica non fa al caso tuo, puoi creare
>un SSIS che ogni x tempo vada a caricare i dati in un altro database
>(o tabella, ma db è più chiaro e comodo).
>Avendo poi un database esterno, potrai fare anche più semplicemente
>della BI.
>
>>punto 2 supponiamo che creo una tabella storico movimenti, come
>>si fa in una query di selezione a prendere sia i dati della tabella
>>movimenti che si sta utilizzando sia i dati della tabella storico
>>e far uscire un unico result di dati?
>Se replichi il problema non si pone, ci sono tutti, per quell'anno.
>Se devi fare query cross anno, allora dovrai fare una sorta di
>federazione, usando una vista su di un server centrale mettendo
>in union le tabelle di ogni anno ed interrogando la vista con
>il range di dati che ti serve (dovrai aggiungere un marker per
>l'anno di corrispondenza in modo da definire cosa interrogare).
>La vista si occuperà di andare a toccare SOLO le tabelle che
>effettivamente vengono coinvolte dalla ricerca.
>
>>Grazie ciao
>di nulla!
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://blogs.dotnethell.it/suxstellino
>http://suxstellino.wordpress.com
>http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>ciao Ale purtroppo da questo punto di vista sotto questo aspetto
>in sql non sn molto ferrato per questo ho scritto tale post per farmi dare mano.
in aggiunta, è un discorso che meriterebbe settimane di training

>Calcolando che posso avere max sql server 2012 professional
Professional? Vorrai dire Standard, Developer, Enterprise, Web?

>Prima di tutto il passaggio di dati dalla tabella in lavorazione
>alla tabella storico viene eseguito solo dagli operatori dell'azienda
>che gestisci le utente e viene eseguito ogni anno, lasciando
>però sempre due anni a confronto nella tabella di lavorazione.
Come avviene l'operazione? c'è uno spostamento massivo? C'è una update? Che processo parte?

>Te mi consigli di creare un database a parte con questa tabella
>storico e non ci sono problemi ed in più avere questo database
>su un disco differente a quello del database in lavorazione,
>perchè?
Dipende dalla risposta alle domande sopra.

>Poi comunque se se non errore dato che le query di selezione
>sono le stesse sia se dovessi applicarle sul database in lavorazione
>sia su quello storico, se gestisco tutto le query via code behind
>(in riferimento all'altro mio post a cui mi hai risposto) a questo
>punto potrei anche avere due connectionstring diverse e quella
>che si riferisce allo storico attivarla solo se l'utente ha bisogno
>di gestire i dati dallo storico. A questo punto, se si può, eseguire,
>per esempio, una query di selezione sulla tabella movimenti e
>un'altra selezione sulla tabella storico e via code behind gestire
>i dati e unirli per far uscire un unico risultato. E' sbagliata
>questa idea o fattibile?
è fattibile, ed in questo caso non ti servono architetture SQL. Ma prima vediamo di capire cosa succede al passaggio a storico.

>Altrimenti dimmi te se c'è una procedura semplice da adottare e capire.
Sono cose macchinose, non complesse, ma dovrai o studiare o sviluppare qualcosa.


Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

trinity Profilo | Guru

>>ciao Ale purtroppo da questo punto di vista sotto questo aspetto
>>in sql non sn molto ferrato per questo ho scritto tale post per farmi dare mano.
>in aggiunta, è un discorso che meriterebbe settimane di training
>
>
>>Calcolando che posso avere max sql server 2012 professional
>Professional? Vorrai dire Standard, Developer, Enterprise, Web?
si scusa standard, calcola che alla fine è un database di un'applicazione web internet ed intranet

>
>>Prima di tutto il passaggio di dati dalla tabella in lavorazione
>>alla tabella storico viene eseguito solo dagli operatori dell'azienda
>>che gestisci le utente e viene eseguito ogni anno, lasciando
>>però sempre due anni a confronto nella tabella di lavorazione.
>Come avviene l'operazione? c'è uno spostamento massivo? C'è una
>update? Che processo parte?

lo spostamento avverrebbe con una insert avviata da un semplice file eseguibile, sposta i dati nella tabella o database storico e terminato il processo elimina i dati nella tabella di lavorazione

>>Te mi consigli di creare un database a parte con questa tabella
>>storico e non ci sono problemi ed in più avere questo database
>>su un disco differente a quello del database in lavorazione,
>>perchè?
>Dipende dalla risposta alle domande sopra.
>
>>Poi comunque se se non errore dato che le query di selezione
>>sono le stesse sia se dovessi applicarle sul database in lavorazione
>>sia su quello storico, se gestisco tutto le query via code behind
>>(in riferimento all'altro mio post a cui mi hai risposto) a questo
>>punto potrei anche avere due connectionstring diverse e quella
>>che si riferisce allo storico attivarla solo se l'utente ha bisogno
>>di gestire i dati dallo storico. A questo punto, se si può, eseguire,
>>per esempio, una query di selezione sulla tabella movimenti e
>>un'altra selezione sulla tabella storico e via code behind gestire
>>i dati e unirli per far uscire un unico risultato. E' sbagliata
>>questa idea o fattibile?
>è fattibile, ed in questo caso non ti servono architetture SQL.
>Ma prima vediamo di capire cosa succede al passaggio a storico.
>
>>Altrimenti dimmi te se c'è una procedura semplice da adottare e capire.
>Sono cose macchinose, non complesse, ma dovrai o studiare o sviluppare
>qualcosa.
>
>
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://blogs.dotnethell.it/suxstellino
>http://suxstellino.wordpress.com
>http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

alx_81 Profilo | Guru

>lo spostamento avverrebbe con una insert avviata da un semplice
>file eseguibile, sposta i dati nella tabella o database storico
>e terminato il processo elimina i dati nella tabella di lavorazione
Forse è meglio farlo fare batch, con l'operazione utente verrà "schedulata" la prenotazione dell'esportazione in un solo punto, così eviti che tutti gli utenti spostino i dati.
E così puoi decidere di eseguire in un momento di "scarico", anche perchè attenzione.. questa operazione costerà sempre di più col tempo. Quindi se la fai con processi separati è molto più controllabile.
Comunque, puoi anche usare un'altra tabella, ma fai attenzione alla definizione dei file group di indici e dati.
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

trinity Profilo | Guru

>>lo spostamento avverrebbe con una insert avviata da un semplice
>>file eseguibile, sposta i dati nella tabella o database storico
>>e terminato il processo elimina i dati nella tabella di lavorazione
>Forse è meglio farlo fare batch, con l'operazione utente verrà
>"schedulata" la prenotazione dell'esportazione in un solo punto,
>così eviti che tutti gli utenti spostino i dati.
sisi ci avevo pensato grazie


>E così puoi decidere di eseguire in un momento di "scarico",
>anche perchè attenzione.. questa operazione costerà sempre di
>più col tempo. Quindi se la fai con processi separati è molto
>più controllabile.
>Comunque, puoi anche usare un'altra tabella, ma fai attenzione
>alla definizione dei file group di indici e dati.
>Alessandro Alpi | SQL Server MVP
>MCP|MCITP|MCTS|MCT
>
>http://blogs.dotnethell.it/suxstellino
>http://suxstellino.wordpress.com
>http://mvp.microsoft.com/en-us/mvp/Alessandro%20Alpi-4014222

Cirillo Fabio
www.trycontact.com
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5