Das Szenario ist also das folgende:
Ich habe mehrere Instanzen eines Webdienstes, der einen Datenblock in Azure Storage schreibt. Ich muss in der Lage sein, Blobs in einem Container (oder einem virtuellen Verzeichnis) zu gruppieren, je nachdem, wann sie empfangen wurden. Hin und wieder (im schlimmsten Fall jeden Tag) werden ältere Blobs verarbeitet und dann gelöscht.
Ich habe zwei Möglichkeiten:
Option 1
Ich mache einen Container namens "Blobs" (zum Beispiel) und speichere dann alle Blogs in diesem Container. Jeder Blob verwendet einen Verzeichnisstilnamen, wobei der Verzeichnisname der Zeitpunkt ist, zu dem er empfangen wurde (z. B. "hr0min0 / data.bin", "hr0min0 / data2.bin", "hr0min30 / data3.bin", "hr1min45 / data.bin" ", ...," hr23min0 / dataN.bin "usw. - alle X Minuten ein neues Verzeichnis ). Das Ding, das diese Blobs verarbeitet, verarbeitet zuerst hr0min0-Blobs, dann hr0minX usw. (und die Blobs werden bei der Verarbeitung noch geschrieben).
Option 2
Ich habe viele Container mit einem Namen, der auf der Ankunftszeit basiert (also zuerst ein Container mit dem Namen blobs_hr0min0, dann blobs_hr0minX usw.), und alle Blobs im Container sind die Blobs, die zur angegebenen Zeit angekommen sind. Das Ding, das diese Blogs verarbeitet, verarbeitet jeweils einen Container.
Meine Frage ist also, welche Option ist besser? Gibt mir Option 2 eine bessere Parallelisierung (da sich ein Container auf verschiedenen Servern befinden kann) oder ist Option 1 besser, weil viele Container andere unbekannte Probleme verursachen können?
Jeder hat Ihnen hervorragende Antworten gegeben, wenn Sie direkt auf Blobs zugreifen. Wenn Sie jedoch Blobs in einem Container auflisten müssen, werden Sie mit dem Modell mit vielen Containern wahrscheinlich eine bessere Leistung erzielen. Ich habe gerade mit einer Firma gesprochen, die eine große Anzahl von Blobs in einem einzigen Container aufbewahrt hat. Sie listen häufig die Objekte im Container auf und führen dann Aktionen für eine Teilmenge dieser Blobs aus. Sie sehen einen Leistungseinbruch, da die Zeit zum Abrufen einer vollständigen Liste immer länger geworden ist.
Dies gilt möglicherweise nicht für Ihr Szenario, ist jedoch zu berücksichtigen ...
quelle
Count
Eigenschaft der Liste zu überprüfen .Theoretisch sollte es keinen Unterschied zwischen vielen Containern oder weniger Containern mit mehr Blobs geben. Die zusätzlichen Container können als zusätzliche Sicherheitsgrenzen nützlich sein (z. B. für öffentlichen anonymen Zugriff oder andere SAS-Signaturen). Zusätzliche Container können auch das Housekeeping beim Beschneiden etwas vereinfachen (Löschen eines einzelnen Containers im Vergleich zum Zielen auf jeden Blob). Aus diesen Gründen verwende ich tendenziell mehr Container (nicht aus Gründen der Leistung).
Theoretisch sollten die Auswirkungen auf die Leistung nicht bestehen. Der Blob selbst (vollständige URL) ist der Partitionsschlüssel in Windows Azure (seit langer Zeit). Dies ist die kleinste Sache, die von einem Partitionsserver ausgeglichen wird. Sie könnten (und werden es oft tun) zwei verschiedene Blobs in demselben Container haben, die von verschiedenen Servern bereitgestellt werden.
Jeremy gibt an, dass zwischen mehr und weniger Containern ein Leistungsunterschied besteht. Ich habe mich nicht genug mit diesen Benchmarks befasst, um zu erklären, warum dies der Fall sein könnte, aber ich würde andere Faktoren (wie Größe, Testdauer usw.) vermuten, um etwaige Unstimmigkeiten zu erklären.
quelle
Es gibt noch einen weiteren Faktor, der dazu beiträgt. Preis!
Derzeit sind Operation List und Create Container zum gleichen Preis erhältlich: 0,054 US $ / 10.000 Anrufe
Der gleiche Preis gilt eigentlich für das Schreiben des Blobs.
Im Extremfall können Sie also viel mehr bezahlen, wenn Sie viele Container erstellen und löschen
Sie können den Rechner hier sehen: https://azure.microsoft.com/en-us/pricing/calculator/
quelle