ECS: Kontrol af S3-objektets eksistens
Summary: Sådan kontrolleres objektets eksistens i s3.
Instructions
Brug af HEAD til mere effektivt at kontrollere et objekts eksistens.
Objektliste er en iboende ineffektiv måde at kontrollere eksistensen af et bestemt objekt på. Indekssøgning er ikke kun relativt langsom for denne specifikke anmodning, men det kan også påvirke den samlede belastning og ydeevne.
Det er altid mere effektivt at anmode om et bestemt objekt end at anmode om et eller flere objekter, der matcher parametrene. Objektliste er en form for søgning, hvor distribuerede indekser skal forespørges.
Brug af HEAD på objektet er den bedste metode til at kontrollere, at det eksisterer. Med ECS-objekt-SDK gøres dette med GetObjectMetadataRequest.
Hvis objektet IKKE findes, kaster SDK følgende undtagelse på grund af et 404-fejlsvar:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Her er et eksempel på brug af GetObjectMetadataRequest, som bruges i getObjectMetadata-klientmetoden:
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()); }
Hvis du bruger AWS java SDK, og objektet ikke findes, kaster SDK følgende undtagelse.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Her er et eksempel 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()); }
Kontroller, om objektet findes, for at afgøre, om putObject er nødvendigt.
Hvis du kontrollerer objektets eksistens for at afgøre, om putObject er nødvendigt, skal du overveje at bruge betingede metoder til PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Begge disse metoder har brug for en objekt-etag-værdi og bruger overskrifterne "if-match","if-none-match" i PUT-anmodningen.
Der er også metoderne withIfUnmodifiedSince() og withIfModifiedSince(), som hver tager et datoobjekt.
Hvis etag eller md5 ikke er tilgængelige, skal det hentes med en GetObjectMetadataRequest.
Et effektivt alternativ ville være at bruge withIfUnmodifiedSince(), hvis datoen var gammel nok.
SR med teknisk support fra ECS
Hvis der er bekymring for eksistensen af et objekt, skal du åbne en serviceanmodning hos ECS-supportteamet.