Verbessern der Abfragegeschwindigkeit des azure Blobspeichers

7

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%     
krolth 11.05.2011, 01:29
quelle

3 Antworten

18

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.

hier klicken

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

verwenden

IEnumerable 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.

    
David Steele 11.05.2011, 01:40
quelle
3

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);

    
pmeyer 27.03.2015 23:03
quelle
2

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

    
Peter Kellner 13.05.2011 21:47
quelle