Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Consiglio su salvataggio in db di immagini
mercoledì 28 novembre 2012 - 11.26
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
VB.NET
|
.NET 4.0
|
Windows Server 2008
|
Visual Studio 2010
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
mer 28 nov 2012 - 11:26
ragazzi mi servirebbe un vostor consiglio....ho creato una scheda clienti in web con sql server 2008 in uqesta scheda vi sono due campi che deve contenere una l'imamgine del cliente ed una eventuale logo azienda...dato che i clienti potrebbero essere oltre 3000 ho pensato di salvare la path dove si trova l'immagine ed uplodare la stessa immagine sul server in modo tale da rendere il db leggero e non grande...oppure mi consigliate di salvare l'immagine in un campo binario o image del db?
Ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
ratum99
Profilo
| Junior Member
121
messaggi | Data Invio:
mer 28 nov 2012 - 11:47
>ragazzi mi servirebbe un vostor consiglio....ho creato una scheda
>clienti in web con sql server 2008 in uqesta scheda vi sono due
>campi che deve contenere una l'imamgine del cliente ed una eventuale
>logo azienda...dato che i clienti potrebbero essere oltre 3000
>ho pensato di salvare la path dove si trova l'immagine ed uplodare
>la stessa immagine sul server in modo tale da rendere il db leggero
>e non grande...oppure mi consigliate di salvare l'immagine in
>un campo binario o image del db?
>
>Ciao
>Cirillo Fabio
Dalla mia esperienza, consiglio vivamente di non salvare le immagini nel DB per vari motivi.
Sicuramente il più importante è che gestire un DB di grandi dimensioni è molto più difficoltoso di gestire una cartella con tante immagini.
Poi di solito gli host ti danno dimensioni limitate per il DB mentre MB "illimitati" per lo spazio.
DomA
Profilo
| Expert
537
messaggi | Data Invio:
mer 28 nov 2012 - 15:54
>> ho pensato di salvare la path dove si trova l'immagine ed uplodare la stessa immagine sul server
credo proprio che questa sia la strada giusta per almeno due motivi:
1) un db più snello dovrebbe essere più veloce da caricare
2) all'umentare delle dimensioni del db aumentano i costi (almeno questa è la politica di molti provider)
......................................................................................
Ricorda che, accettare la risposta è un modo di ringraziare chi ci ha aiutato ed evidenziare che il problema è stato risolto.
http://www.infomidia.it
Domenico
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 29 nov 2012 - 01:20
>>> ho pensato di salvare la path dove si trova l'immagine ed uplodare la stessa immagine sul server
Ciao, questo è un annoso problema ed è possibile affrontarlo con innumerevoli soluzioni.
Dipende molto anche da cosa devi fare e da come lo vuoi fare.
Mi spiego meglio.. Innanzitutto, il caricamento dei dati deve essere sincrono e transazionale? Se l'immagine non si carica il record deve essere salvato? E, in caso contrario, cosa deve succedere nel momento in cui qualcosa non va?
In secondo luogo, devi fare versionamento delle immagini? Oppure si tratta solamente di due binary e stop?
Infine, ma non di certo per importanza.. Vuoi fare in modo che i tuoi backup portino con sè anche le immagini?
Parlando poi di licenze.. Che versioni di SQL Server hai (se non ricordo male hai SQL Server no?).
SQL Server appunto, a partire dalla versione 2008, ti dà il FILESTREAM, che è un'opzione (servizio anche) che ti isola una cartella e pone le immagini salvate "direttamente" su database, evitandoti l'utilizzo di campi BLOB. In poche parole, utilizzando FILESTREAM, avrai tutto incluso nel db senza dover parlare di campi speciali e il backup restore plan conterrà anche gli stream ottimizzati ed opportunamente organizzati. Leggi qui per maggiori info:
http://technet.microsoft.com/it-it/library/bb933993
(v=sql.100).aspx
Quando è consigliato usarli?
- Gli oggetti che si stanno archiviando sono, in media, più grandi di 1 MB.
- La rapidità dell'accesso in lettura è importante.
- Si stanno sviluppando applicazioni che utilizzano un livello intermedio per la logica dell'applicazione.
Ovviamente se devi gestire letture posizionali (e non scan o liste di utenti nel tuo caso) e i file immagine sono veramente piccoli (e lo rimangono SEMPRE) puoi anche usare i BLOB (varbinary(MAX)) ma non utilizzare image/text che sono deprecati.
Il gestire la cartella, a volte può essere più comodo, ma la manutenzione è decisamente più impegnativa, e pure la transazionalità ti obbliga a passare dal filesystem, con il conseguente collo di bottiglia dello storage e il problema della gestione delle risorse allocate (da disallocare).
Seppure la strada delle cartelle sia comunque non malvagia, considera anche il FILESTREAM e in generale il blob, soluzione che molto spesso è sottovalutata, ma in certi casi, è forse la più efficace. Se devi leggere, per esempio, 50k tra le due immagini, di un solo record, a mio avviso il BLOB è una buona prassi. Se devi leggere 3000 righe x 50K, già l'approccio non aiuta (se le leggi massive) e con filestream hai velocità in lettura continuando a tenere all'interno del tuo database i dati delle immagini.
Sulla base di questo, effettua la tua analisi e vedi quale metodo calza di più alla tua casistica.
Ciao
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
gio 29 nov 2012 - 09:28
Ciao, allora nel parlammo anche in un altro post...in pratica si tratta del db in cui devo salvare gli utenti che si registrano sul sito del mio cliente. Purtroppo l'immagine che uplodano può superare anche 1mb anche perchè non so in asp come poter fare un controllo e dire se l'immagine deve essere massimo di una grandezza che stabilisco io. Comuqnue i record possono essere tanti veramente tanti e poi su tale record io devo esere anche delle ricerche con relativo caricamento dei record selezionati che a loro volta avranno l'immagine da caricare...esempio è capace che il mio cliente vuole visualizzare la lista degli utenti registrati della città di roma e in questo caso la ricerca deve essere veloce ed il risultato a video potrebbe essere di centinaia di record...In altre parole devo calcolare la ricerca e visualizzazione da un singolo record a decine di record...Allora avevo pensato di creare nella tabella degli utenti per ogni record un campo varchar nel quale andavo a salvare semplicemente il percorso del file uplodato sul server web remoto e di conseguenza quando andavo a caricare il record o i record si prende la path salvata caricando la relativa immagine....Io dispongo di sql server 2008 ma non è mio è quello che offre il provider dove girerà il sito web, ovviamente non avendo un server dedicato devo calcolare anche la grandezza del Db che più aumenta e più avrò un costo da sostenere, in quanto il provider ti offre una grandezza standard...In futuro se il progetto prenderà piede avremo un nostro server dedicato e li posso divertirmi di più...Ora devo pensare alla stabilità e velocità nel caricare le immagini...Per quanto riguarda il caricamento dell'immagine quella avviene sempre insieme ai dati, se l'utente non ha messo una sua immagine personale, di default viene caricata una standard offerta da noi...
Ecco il quadro generale, in base a questo cosa mi consigli? Continuare con il mio metodo oppure utilizzare il filestream (se dovessi utilizzare questa strada hai qualche esempio da farmi vedere?)
ah dimenticavo alx_81 so se non ricordo male che ancge tu conosci i comandi telerik ecco un link di come vorrò far visualizzare i record ricercati:
http://demos.telerik.com/aspnet-ajax/listview/examples/templates/datalayouttemplates/defaultcs.aspx
Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 29 nov 2012 - 10:30
>Ecco il quadro generale, in base a questo cosa mi consigli? Continuare
>con il mio metodo oppure utilizzare il filestream (se dovessi
>utilizzare questa strada hai qualche esempio da farmi vedere?)
come ti dicevo:
Quando è consigliato usarli?
- Gli oggetti che si stanno archiviando sono, in media, più grandi di 1 MB.
- La rapidità dell'accesso in lettura è importante.
- Si stanno sviluppando applicazioni che utilizzano un livello intermedio per la logica dell'applicazione.
però se il db non è tuo, mi sa che ti devi attaccare. Non so se il provider supporta l'installazione di quel servizio.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
trinity
Profilo
| Guru
3.465
messaggi | Data Invio:
gio 29 nov 2012 - 11:27
Appunto allora procederò per questa strada ossia salvo nel db la path dell'immagine e il file dell'immagine l'uplodo in una cartella passando poi alla apgina web imageurl del file prendendolo dal db..appena il progetto e lo spero, decolla allora prendo un server dedicato ci installo sql server 2008 mio con il servizio filestream e gestisco il tutto come mi hai consigliato..
Ciao e grazie
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com
DomA
Profilo
| Expert
537
messaggi | Data Invio:
gio 29 nov 2012 - 21:18
alx_81 complimenti per la risposta cosù ben articolata e grazie per il link su "FILESTREAM"
------------------------------------------------
http://www.infomidia.it
Domenico
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
ven 30 nov 2012 - 10:36
>alx_81 complimenti per la risposta cosù ben articolata e grazie
>per il link su "FILESTREAM"
aahah, grazie a te
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT
http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi
Torna su
Stanze Forum
Elenco Threads
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 !