Scenariusz jest więc następujący:
Mam wiele wystąpień usługi internetowej, która zapisuje obiekt blob danych w usłudze Azure Storage. Muszę mieć możliwość grupowania obiektów blob w kontenerze (lub katalogu wirtualnym) w zależności od tego, kiedy zostały odebrane. Raz na jakiś czas (w najgorszym przypadku codziennie) starsze obiekty blob będą przetwarzane, a następnie usuwane.
Mam dwie możliwości:
opcja 1
Tworzę jeden kontener o nazwie „blobs” (na przykład), a następnie przechowuję w nim wszystkie blogi. Każdy obiekt blob będzie używał nazwy stylu katalogu z nazwą katalogu będącą datą jego otrzymania (np. „Hr0min0 / data.bin”, „hr0min0 / data2.bin”, „hr0min30 / data3.bin”, „hr1min45 / data.bin ", ...," hr23min0 / dataN.bin ", etc - nowy katalog co X minut). To, co przetwarza te obiekty BLOB, najpierw przetworzy hr0min0, następnie hr0minX i tak dalej (a obiekty blob są nadal zapisywane podczas przetwarzania).
Opcja 2
Mam wiele kontenerów, z których każdy ma nazwę opartą na czasie przybycia (więc najpierw będzie to kontener o nazwie blobs_hr0min0, a następnie blobs_hr0minX itd.), A wszystkie obiekty blob w kontenerze to te obiekty blob, które przybyły w określonym czasie. To, co przetwarza te blogi, będzie przetwarzać jednocześnie jeden kontener.
Więc moje pytanie brzmi: która opcja jest lepsza? Czy opcja 2 zapewnia lepszą równoległość (ponieważ kontenery mogą znajdować się na różnych serwerach), czy też opcja 1 jest lepsza, ponieważ wiele kontenerów może powodować inne nieznane problemy?
Każdy udzielił Ci doskonałych odpowiedzi dotyczących bezpośredniego dostępu do obiektów blob. Jeśli jednak musisz wyświetlić listę obiektów blob w kontenerze, prawdopodobnie zobaczysz lepszą wydajność w modelu z wieloma kontenerami. Właśnie rozmawiałem z firmą, która przechowuje ogromną liczbę obiektów blob w jednym kontenerze. Często wymieniają obiekty w kontenerze, a następnie wykonują akcje na podzbiorze tych obiektów blob. Widzą wzrost wydajności, ponieważ czas na pobranie pełnej listy rośnie.
Może to nie mieć zastosowania w Twoim scenariuszu, ale warto to rozważyć ...
źródło
Count
.Teoretycznie nie powinno być różnicy między wieloma kontenerami lub mniejszą liczbą kontenerów z większą liczbą obiektów typu blob. Dodatkowe kontenery mogą być przydatne jako dodatkowe granice bezpieczeństwa (na przykład dla publicznego anonimowego dostępu lub różnych podpisów SAS). Dodatkowe kontenery mogą również nieco ułatwić porządkowanie podczas przycinania (usuwanie pojedynczego kontenera zamiast kierowania na każdy obiekt blob). Z tych powodów używam więcej kontenerów (nie ze względu na wydajność).
Teoretycznie wpływ na wydajność nie powinien istnieć. Sam obiekt BLOB (pełny adres URL) jest kluczem partycji w systemie Windows Azure (był przez długi czas). To najmniejsza rzecz, która będzie równoważona obciążeniem z serwera partycji. Tak więc możesz (i często będziesz) mieć dwa różne obiekty blob w tym samym kontenerze, które są obsługiwane przez różne serwery.
Jeremy wskazuje, że istnieje różnica w wydajności między większą a mniejszą liczbą kontenerów. Nie zagłębiłem się w te testy porównawcze wystarczająco, aby wyjaśnić, dlaczego tak się dzieje, ale podejrzewam inne czynniki (takie jak rozmiar, czas trwania testu itp.), Aby wyjaśnić wszelkie rozbieżności.
źródło
Jest jeszcze jeden czynnik, który ma na to wpływ. Cena £!
Obecnie operacje Lista i Utwórz kontener są w tej samej cenie: 0,054 USD / 10 000 połączeń
Ta sama cena jest faktycznie za napisanie obiektu blob.
Więc w skrajnych przypadkach możesz zapłacić znacznie więcej, jeśli utworzysz i usuniesz wiele kontenerów
kalkulator możesz zobaczyć tutaj: https://azure.microsoft.com/en-us/pricing/calculator/
źródło