ECS: Überprüfen der Existenz eines S3-Objekts
Summary: So überprüfen Sie die Objektexistenz in s3.
Instructions
Verwenden von HEAD zur effizienteren Überprüfung der Existenz eines Objekts.
Die Objektauflistung ist eine ineffiziente Methode, um das Vorhandensein eines bestimmten Objekts zu überprüfen. Die Indexsuche ist nicht nur für diese spezifische Anforderung relativ langsam, sondern kann sich auch auf die Gesamtlast und -leistung auswirken.
Das Anfordern eines bestimmten Objekts ist immer effizienter als das Anfordern eines oder mehrerer Objekte, die den Parametern entsprechen. Die Objektauflistung ist eine Form der Suche, bei der verteilte Indizes abgefragt werden müssen.
Die Verwendung von HEAD für das Objekt ist die beste Methode, um zu überprüfen, ob es existiert. Beim ECS-Objekt-SDK erfolgt dies mit GetObjectMetadataRequest.
Wenn das Objekt NICHT vorhanden ist, löst das SDK aufgrund einer 404-Fehlerantwort die folgende Ausnahme aus:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Hier ist ein Beispiel für die Verwendung von GetObjectMetadataRequest, die in der getObjectMetadata-Clientmethode verwendet wird:
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()); }
Wenn das AWS Java SDK verwendet wird und das Objekt nicht vorhanden ist, löst das SDK die folgende Ausnahme aus.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Hier ist ein Beispiel dafür:
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()); }
Überprüfen Sie, ob das Objekt vorhanden ist, um festzustellen, ob putObject benötigt wird.
Wenn Sie überprüfen, ob ein Objekt vorhanden ist, um festzustellen, ob putObject benötigt wird, sollten Sie die Verwendung der bedingten PutObjectRequests-Methoden in Betracht ziehen:
withIfMatch() and withIfNoneMatch().
Beide Methoden benötigen einen Objekt-etag-Wert und verwenden die Header "if-match","if-none-match" in der PUT-Anforderung.
Es gibt auch die Methoden withIfUnmodifiedSince() und withIfModifiedSince(), die jeweils ein Date-Objekt verwenden.
Wenn etag oder md5 nicht verfügbar sind, müsste es mit einem GetObjectMetadataRequest abgerufen werden.
Eine effiziente Alternative wäre die Verwendung von withIfUnmodifiedSince(), wenn das Datum alt genug ist.
SR mit technischem ECS-Support
Wenn Bedenken hinsichtlich der Existenz eines Objekts bestehen, öffnen Sie einen Service-Request beim ECS-Supportteam.