ECS: Kontrollerar förekomsten av S3-objekt
Summary: Så här kontrollerar du objektets existens i s3.
Instructions
Använda HEAD för att mer effektivt kontrollera ett objekts existens.
Objektlistning är i sig ett ineffektivt sätt att kontrollera om det finns ett specifikt objekt. Indexsökning är inte bara relativt långsam för den här specifika begäran, utan kan också påverka den övergripande belastningen och prestandan.
Att begära ett specifikt objekt är alltid mer effektivt än att begära ett eller flera objekt som matchar parametrar. Objektlistning är en form av sökning där distribuerade index måste efterfrågas.
Att använda HEAD på objektet är den bästa metoden för att kontrollera att det finns. Med ECS-objekt-SDK görs detta med GetObjectMetadataRequest.
Om objektet INTE finns genererar SDK:n följande undantag på grund av ett 404-felsvar:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Här är ett exempel på hur du använder GetObjectMetadataRequest som används i klientmetoden 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()); }
Om du använder AWS java SDK och objektet inte finns genererar SDK:n följande undantag.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Här är ett exempel på det:
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()); }
Kontrollera om objektet finns för att avgöra om putObject behövs.
Om du söker efter objektets existens för att avgöra om putObject behövs bör du överväga att använda villkorsbaserade metoder för PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Båda dessa metoder behöver ett object etag-värde och använder rubrikerna "if-match", " if-none-match" i PUT-begäran.
Det finns också metoderna withIfUnmodifiedSince() och withIfModifiedSince() som var och en tar ett Date-objekt.
Om etag eller md5 inte är tillgängliga måste den hämtas med en GetObjectMetadataRequest.
Ett effektivt alternativ skulle vara att använda withIfUnmodifiedSince() om datumet var tillräckligt gammalt.
SR med teknisk ECS-support
Om det finns problem med förekomsten av ett objekt öppnar du en tjänstebegäran hos ECS-supportteamet.