2016-06-29 7 views
0

Ich versuche, eine Liste von Blobnamen in Azure zu erhalten, und ich suche nach Möglichkeiten, diese Operation wesentlich schneller zu machen. Innerhalb eines bestimmten Unterordners kann die Anzahl der Blobs 150.000 Elemente überschreiten. Die Dateinamen der Blobs sind eine kodierte ID, auf die ich mich wirklich verlassen muss, aber ich könnte diese als eine Art Metadaten speichern, wenn ich nur die Metadaten oder ein einzelnes Feld der Metadaten abfragen könnte.Schneller Mechanismus zum Abfragen von Azure-Blobnamen

ich, dass etwas so einfach wie die folgenden finden:

var blobList = container.ListBlobs(null, false); 

nach oben von 60 Sekunden dauern kann von meinem Desktop und in der Regel etwa 15 Sekunden laufen beim Laufen auf eine VM in Azure gehostet. Diese Zeiten basieren auf einem Test von 125k Blobs in einem ansonsten leeren Container und waren einige Stunden nachdem sie hochgeladen wurden, also hatten sie definitiv Zeit, sich sozusagen "niederzulassen".

Ich habe mehrere Variationen versucht und versucht, mit ListBlobsSegmented, aber es hilft nicht wirklich, weil die Funktion eine Menge zusätzlicher Informationen zurückgibt, die ich einfach nicht brauche. Ich brauche nur die Blob-Namen, damit ich die verschlüsselte ID sehen kann, um zu sehen, was aktuell gespeichert ist und was nicht.

Die Abfrage nach den BLOB-Namen und das Extrahieren der codierten ID ist etwas zeitempfindlich, also wenn ich es unter 1 Sekunde bekommen könnte, wäre ich damit zufrieden. Wenn ich die Dateien lokal speichere, kann ich die gesamte Liste der Dateien in ein paar Millisekunden abrufen, aber dafür muss ich Azure-Speicher verwenden. Das ist keine Option.

Das einzige, was ich mir vorstellen kann, um die Zeit zu reduzieren, die zur Identifizierung der verfügbaren Blobs benötigt wird, besteht darin, die Namen der hinzugefügten oder entfernten Blobs aus einem bestimmten Ordner zu verfolgen und in einem separaten Blob zu speichern. Wenn ich dann die Namen der Blobs in diesem Ordner kennen müsste, würde ich den Blob mit den Metadaten lesen, anstatt ListBlobs zu verwenden. Ich nehme an, ein anderer wäre es, Azure Table-Speicher auf ähnliche Weise zu verwenden, aber es scheint, als würde ich gezwungen werden, Informationen über einen bestimmten Ordner im Container zwischenzuspeichern.

Gibt es einen besseren Weg dies zu tun oder ist es das, was Menschen normalerweise tun, wenn Sie Hunderttausende von Blobs in einem einzigen Ordner haben?

+0

Diese Art von Frage wurde schon früher gestellt, mit ähnlichen Varianten (wie z. B. [diese] (http://stackoverflow.com/questions/8158452/is-it-besser-zu-haben-meine-kleine-wahrheit) -Speicher-Blob-Container-jeder-mit-einigen-bl/8160317 # 8160317)). Der Blob-Speicher ist kein Datenbanksystem, daher gibt es keine Möglichkeiten zur Suche, abgesehen von Blob-Metadaten oder Bulk-Listings. Sie müssen eine Art von Datenbank zum Speichern von Blob-Metadaten verwenden, um durchsuchbaren Inhalt zu haben, in dem Sie dann spezifische Blob-Uri und Zugriffs-Blobs direkt extrahieren können. –

+0

Ich habe mir diese Frage zusammen mit etwa einem Dutzend anderer Varianten angeschaut, weshalb ich sie nicht einzeln aufgelistet habe. Das Problem, das ich versuche zu lösen, ist, die Namen von ihnen zu bekommen, was man argumentieren könnte, ist eine Form der Suche, aber es ist wirklich nicht. Ich möchte nur eine Liste der Namen. Mit 125.000 Elementen im selben Ordner sind jedoch nur 2,6 MB Daten gespeichert, aber die Funktion gibt 10 MB Daten zurück. Alles, was ich brauche, sind die Namen von ihnen, also ist es eine Frage von: Ist es möglich, nur die Namen ohne all die anderen Eigenschaften zu bekommen oder nicht? –

Antwort