Momentan haben wir einen Blobspeicher mit Tausenden von Dateien unter demselben Azure-Container. Unsere Dateinamenskonvention ist ungefähr so:
SpeicherName \ Team \ SubTeam \ Dateiname
Ich schreibe ein Tool, das die Dateien für jedes einzelne Subteam anzeigt. Der Code ruft die Liste der Blobs für den Container ab und versucht dann, für jeden einzelnen Code das richtige Team \ Subteam zu finden (siehe Beispielcode unten).
Dies funktioniert, ist aber extrem langsam (weil ich alle Dateien durchsuchen muss, um zu sehen, ob sie mit einem bestimmten Subteam übereinstimmen). Gibt es eine Möglichkeit, die Geschwindigkeit der Abfrage zu verbessern? Ich denke an Optimierungen wie "Finde die erste Datei, die dem gesuchten Team entspricht und behalte den Überblick, wenn du ein anderes Team findest, um das zu beenden", aber das würde annehmen, dass die BlobList sortiert ist und nicht reparieren würde das Worst-Case-Szenario.
Leider ist das Teilen der Dateien unter verschiedenen Containern derzeit keine Option.
Hier ist ein Beispielcode:
%Vor%1. Lösung Mit der REST-Schnittstelle können Sie
übergeben %Vor%und dies wird ein XML-Dokument mit nur den Dateien im Unterteam "Folder" zurückgeben (ich weiß, es ist kein Ordner, aber es sieht aus wie eins in den Tools)
Sie müssen möglicherweise eine gemeinsame Zugriffssignatur generieren, um darauf zugreifen zu können. Sie müssen dies am Ende der URL markieren.
Wo es zeigt, dass Sie nach Blobname Präfix filtern können.
2. Lösung Dies ist wahrscheinlich näher an dem, was Sie wollen. Wenn Sie den neuen Speicherclient verwenden können, der in der azure sdk 1.3 aktualisiert wurde, können Sie jetzt
verwendenIEnumerable blobList = client.ListBlobsWithPrefix ("Team / SubTeam");
Wo Client eine Instanz von CloudBlobClient ist.
EDIT - 18. November 2013 Es sieht so aus, als ob resttype nicht mehr als Parameter unterstützt wird und es sollte ein restype sein. Dies scheint am Wochenende ruhig geschehen zu sein. Ich habe das obige URL-Beispiel geändert.
Nur ein Update ...
Sie können eine Liste von Blobs verwenden, indem Sie GetDirectoryRefence verwenden und dann Blobs auflisten ...
var subDirectory = blobContainer.GetDirectoryReference (String.Format ("{0} /", Ordner)); return subDirectory.ListBlobs (false, BlobListingDetails.Metadata);
Benötigen Sie wirklich die BlobListingDetails.Metadata? Das führt dazu, dass viele zusätzliche Informationen heruntergeladen werden. Ich denke, alles, was Sie brauchen, ist der Name
Tags und Links azure c# azure-storage-blobs azure-storage