ECS: Sprawdzanie istnienia obiektu S3
Summary: Sprawdzanie istnienia obiektu w s3.
Instructions
Używanie HEAD do skuteczniejszego sprawdzania istnienia obiektu.
Lista obiektów jest z natury nieefektywnym sposobem sprawdzania istnienia określonego obiektu. Wyszukiwanie indeksu jest nie tylko stosunkowo powolne dla tego konkretnego żądania, ale może również mieć wpływ na ogólne obciążenie i wydajność.
Żądanie określonego obiektu jest zawsze bardziej wydajne niż żądanie jednego lub większej liczby obiektów pasujących do parametrów. Lista obiektów to forma wyszukiwania, w której należy wysyłać zapytania o indeksy rozproszone.
Użycie HEAD na obiekcie jest najlepszą metodą sprawdzania jego istnienia. W przypadku zestawu SDK obiektów ECS odbywa się to za pomocą polecenia GetObjectMetadataRequest.
Jeśli obiekt NIE istnieje, zestaw SDK zgłasza następujący wyjątek z powodu odpowiedzi na błąd 404:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Oto przykład użycia metody GetObjectMetadataRequest, która jest używana w metodzie klienta getObjectMetadata:
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(<bucket>, <key>); S3ObjectMetadata om = s3.getObjectMetadata(gom); System.out.println("etag: " + om.getETag()); System.out.println("last modified: " + om.getLastModified().toString()); } catch(com.emc.object.s3.S3Exception e) { System.out.println("What happened: " + e.getMessage()); }
Jeśli używasz zestawu AWS Java SDK, a obiekt nie istnieje, zestaw SDK zgłasza następujący wyjątek.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Oto jego przykład:
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(AWSS3Factory.S3_BUCKET, key); s3.getObjectMetadata(gom); } catch(com.amazonaws.services.s3.model.AmazonS3Exception e) { System.out.println("What happened: " + e.getMessage()); }
Sprawdź, czy obiekt istnieje, aby określić, czy putObject jest potrzebny.
Jeśli sprawdzasz istnienie obiektu w celu określenia, czy putObject jest potrzebny, rozważ użycie metod warunkowych PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Obie te metody wymagają wartości etag obiektu i używają nagłówków "if-match," if-none-match" w żądaniu PUT.
Istnieją również metody withIfUnmodifiedSince() i withIfModifiedSince(), z których każda przyjmuje obiekt Date.
Jeśli element etag lub md5 nie są dostępne, należy je pobrać za pomocą polecenia GetObjectMetadataRequest.
Efektywną alternatywą byłoby użycie metody withIfUnmodifiedSince(), jeśli data jest wystarczająco stara.
SR z pomocą techniczną ECS
Jeśli istnieje obawa co do istnienia obiektu, otwórz zgłoszenie serwisowe do zespołu pomocy technicznej ECS.