ECS: Kontrollere S3-objektets eksistens
Summary: Hvordan sjekke objekteksistensen i s3.
Instructions
Bruke HEAD for å kontrollere et objekts eksistens mer effektivt.
Objektoppføring er en iboende ineffektiv måte å sjekke om det finnes et bestemt objekt. Indekssøk er ikke bare relativt tregt for denne spesifikke forespørselen, men det kan også påvirke total belastning og ytelse.
Å be om et bestemt objekt er alltid mer effektivt enn å be om ett eller flere objekter som samsvarer med parametere. Objektoppføring er en form for søk der distribuerte indekser må spørres.
Å bruke HEAD på objektet er den beste metoden for å sjekke at det eksisterer. Med ECS object SDK gjøres dette med GetObjectMetadataRequest.
Hvis objektet IKKE finnes, genererer SDK følgende unntak på grunn av et 404-feilsvar:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Her er et eksempel på bruk av GetObjectMetadataRequest som brukes 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 bruker AWS Java SDK og objektet ikke eksisterer, kaster SDK følgende unntak.
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 finnes for å avgjøre om putObject er nødvendig.
Hvis du kontrollerer objekteksistensen for å avgjøre om putObject er nødvendig, bør du vurdere å bruke betingede metoder for PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Begge disse metodene trenger en objekt-etag-verdi og bruker overskriftene "if-match","if-none-match" i PUT-forespørselen.
Det finnes også metodene withIfUnmodifiedSince() og withIfModifiedSince() som hver tar et Date-objekt.
Hvis etag eller md5 ikke er tilgjengelige, må den hente den med en GetObjectMetadataRequest.
Et effektivt alternativ ville være å bruke withIfUnmodifiedSince() hvis datoen var gammel nok.
SR med ECS teknisk støtte
Hvis det er bekymring for eksistensen av et objekt, kan du åpne en serviceforespørsel med ECS-støtteteamet.