ECS: Controle van het bestaan van S3-object
Summary: Hoe het bestaan van objecten binnen s3 te controleren.
Instructions
HEAD gebruiken om het bestaan van een object efficiënter te controleren.
Objectnotering is een inherent inefficiënte manier om te controleren op het bestaan van een specifiek object. Het zoeken naar indexen is niet alleen relatief traag voor dit specifieke verzoek, maar kan ook van invloed zijn op de algehele belasting en prestaties.
Het aanvragen van een specifiek object is altijd efficiënter dan het aanvragen van een of meerdere objecten die overeenkomen met parameters. Objectvermelding is een zoekvorm waarbij gedistribueerde indexen moeten worden opgevraagd.
Het gebruik van HEAD op het object is de beste methode om te controleren of het bestaat. Met ECS object SDK wordt dit gedaan met de GetObjectMetadataRequest.
Als het object NIET bestaat, genereert de SDK de volgende uitzondering vanwege een 404-foutreactie:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Hier volgt een voorbeeld van het gebruik van de GetObjectMetadataRequest die wordt gebruikt in de clientmethode 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()); }
Als u de AWS Java SDK gebruikt en het object niet bestaat, genereert de SDK de volgende uitzondering.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Hier is er een voorbeeld van:
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()); }
Controleer of het object bestaat om te bepalen of putObject nodig is.
Als u controleert op objectbestaan om te bepalen of putObject nodig is, kunt u overwegen de voorwaardelijke methoden PutObjectRequests te gebruiken:
withIfMatch() and withIfNoneMatch().
Beide methoden hebben een object-etagwaarde nodig en gebruiken de headers "if-match", " if-none-match" in de PUT-aanvraag.
Er zijn ook de methoden withIfUnmodifiedSince() en withIfModifiedSince() die elk een datumobject nodig hebben.
Als de etag of md5 niet beschikbaar zijn, moet deze worden opgehaald met een GetObjectMetadataRequest.
Een efficiënt alternatief zou zijn om de withIfUnmodifiedSince() te gebruiken als de datum oud genoeg was.
SR met technische ondersteuning voor ECS
Als er een probleem is met het bestaan van een object, opent u een serviceaanvraag bij het ECS-supportteam.