2011-10-03 6 views
5

Ho una situazione in cui un utente sta allegando file all'interno di un'applicazione, questi file vengono quindi mantenuti nell'archiviazione BLOB di Azure, esiste una ragionevole probabilità che vi siano duplicati e che si desideri creare una soluzione in cui i blob duplicati sono evitati.C'è un modo per fare collegamenti simbolici ai dati BLOB quando si utilizza Archiviazione di Azure per evitare i blob duplicati?

Il mio primo pensiero è solo per citare i blob come filename_hash ma che cattura solo un sottoinsieme di duplicati, quindi filesize_hash era allora il pensiero successivo.

In questo modo anche se sembra come sto perdendo un po 'della flessibilità dello storage blob per rappresentare la posizione in una gerarchia del file, si veda: Windows Azure: How to create sub directory in a blob container

quindi cercavo di vedere se ci fosse un modo di creare un blob che fa riferimento ai dati blob, ad esempio alcuni per il collegamento simbolico ma non riesce a trovare quello che volevo.

Mi manca qualcosa o devo solo andare con il metodo filesize_hash e memorizzare la mia gerarchia utilizzando un metodo alternativo.

+0

I BLOB hanno il supporto per gli attributi dei metadati, se è necessario memorizzare un indicatore sull'origine, ma non capisco quale sia il vero problema. Potresti essere in grado di ottenere una risposta migliore se spieghi perché il problema si pone. – codingoutloud

risposta

2

No, non ci sono collegamenti simbolici (fonte: http://social.msdn.microsoft.com/Forums/vi-VN/windowsazuredata/thread/6e5fa93a-0d09-44a8-82cf-a3403a695922).

Una buona soluzione dipende dalla dimensione prevista dei file e dal numero di duplicati. Se non ci saranno molti duplicati, o i file sono piccoli, allora potrebbe essere più veloce ed economico vivere con esso - $ 0,15 per gigabyte al mese non è un grande affare da pagare, rispetto al costo di sviluppo! (Questo è l'approccio che stiamo prendendo.)

Se valesse la pena rimuovere i duplicati, utilizzerei la memoria della tabella per creare una sorta di reindirizzamento tra il nome del file e la posizione effettiva dei dati. Quindi eseguirò un reindirizzamento lato client per reindirizzare il browser del client per scaricare la versione corretta.

Se si esegue questa operazione, è necessario conservare il nome del file (poiché ciò sarà visibile all'utente) ma è possibile chiamare la posizione "cartella" come desiderato.

+0

Grazie, anche in questo caso il costo di sviluppo non vale la pena. – JTew

2

Un'altra soluzione per mantenere tutta la struttura dei file ma ancora fornire un modo per fare "collegamenti simbolici" potrebbe essere la seguente, ma come nell'altra risposta il prezzo potrebbe essere così piccolo che non vale la pena di implementarlo .

Ho deciso in una configurazione simile di archiviare l'md5 di ogni file caricato in una tabella e poi in un anno tornare indietro e vedere quanti dublicati sono stati caricati e quanta memoria è possibile salvare. A quel punto sarà facile valutare se vale la pena implementare una soluzione per i collegamenti simbolici.

Lo svantaggio di mantenere tutto nella memoria della tabella è che si ottiene una API di query limitata per i propri BLOB. Invece vorrei suggerire di utilizzare i metadati su BLOB per la creazione di collegamenti. (i metadati si trasformano in normali intestazioni sulle richieste quando si usa REST api ect).

Quindi per i blob pubblici, è sufficiente conservare uno di essi e memorizzare un'intestazione di collegamento che indica dove si trovano i dati.

blob.Metadata.Add("link", dataBlob.Name); 
await blob.SetMetadataAsync(); 
await blob.UploadTextAsync(""); 

a questo punto il blob ora occupa non ci sono dati, ma è ancora presente in stoccaggio e verrà restituito quando si elencano blob.

Quindi, quando si accede ai dati, è sufficiente verificare se un blob ha un set di metadati "link" o con resto, verificare se è presente un'intestazione x-ms-meta-link e quindi leggere i dati da lì.

blob.Container.GetBlockBlobReference(blob.Metadata["link"]).DownloadTextAsync() 

o uno qualsiasi degli altri metodi di accesso ai dati.

Sopra sono solo le basi e sono sicuro che è possibile capire il resto se viene utilizzato.

Problemi correlati