Nous avons actuellement un stockage BLOB avec des milliers de fichiers sous le même conteneur d'azur. Notre convention de nommage de fichier est quelque chose comme ceci:
StorageName \ Team \ Subteam \ Nom de fichier P>
J'écris un outil qui affiche les fichiers pour chaque sous-quai particulier. Le code obtient la liste des blobs pour le conteneur, puis pour chacun de ceux qu'il essaie de correspondre à la bonne équipe \ Subteam (voir ci-dessous pour le code exemple). P>
Cela fonctionne mais est extrêmement lent (car je dois passer à travers tous les fichiers pour voir s'ils correspondent à un sous-jardin particulier). Y a-t-il un moyen d'améliorer la vitesse de la requête? Je peux penser à des optimisations telles que "Rechercher le premier fichier qui correspond à l'équipe que vous recherchez, puis gardez une piste lorsque vous trouverez une équipe différente de cesser de fumer" mais cela supposerait que le blobliste est trié et ne corrigerait pas le pire scénario. p>
Malheureusement, la division des fichiers sous différents conteneurs n'est pas une option à l'heure actuelle. P>
Voici un exemple de code: P>
IEnumerable<IListBlobItem> blobs = blobContainer.ListBlobs( new BlobRequestOptions() { UseFlatBlobListing = true, BlobListingDetails = BlobListingDetails.Metadata }).OfType<CloudBlob>(); foreach (var blob in blobs) { var cloudy = blob as CloudBlob; string blobTeamId = cloudy.Uri.Segments[2].Trim('/'); if (blobTeamId != teamId) continue; //Do something interesting with the file
3 Réponses :
1ère solution forte>
Avec l'interface de repos, vous pouvez passer dans et cela renvoie un document XML avec uniquement les fichiers du «dossier» de la sous-équipe (je sais que ce n'est pas un dossier, mais cela ressemble à un Les outils) p> Vous devrez peut-être générer une signature d'accès partagée pour pouvoir y accéder, vous devez étiqueter cela à la fin de l'URL. P> où il montre que vous pouvez filtrer par préfixe blobname. P> Ienumerable Bloblist = Client.ListBlobSwithPrefix ("Team / Subteam"); P> Où Le client est une instance de Cloudblobclient. P>
Avez-vous vraiment besoin de bloblistingDétails.métadata? Cela provoque une téléchargement de nombreuses informations supplémentaires. Je pense que tout ce dont vous avez besoin est le nom p>
juste une mise à jour ...
Vous pouvez utiliser obtenir une liste de blobs à l'aide de getdirectoryrefence, puis liste blobs ... p>
On dirait que des ListBlobs sont effectivement triés selon MSDN msdn.microsoft.com/en-us /Library/dd135734.aspx .