ECS: S3-objektin olemassaolon tarkistaminen
Summary: Kuinka tarkistaa objektin olemassaolo s3: ssa.
Instructions
HEADin käyttäminen objektin olemassaolon tehokkaampaan tarkistamiseen.
Objektien luettelointi on luonnostaan tehoton tapa tarkistaa tietyn kohteen olemassaolo. Hakemistohaku ei ole vain suhteellisen hidas tälle nimenomaiselle pyynnölle, vaan se voi myös vaikuttaa kokonaiskuormitukseen ja suorituskykyyn.
Tietyn objektin pyytäminen on aina tehokkaampaa kuin yhden tai useamman parametreja vastaavan objektin pyytäminen. Objektilistaus on hakumuoto, jossa hajautetuista indekseistä on tehtävä kysely.
HEAD: n käyttäminen objektissa on paras tapa tarkistaa, että se on olemassa. ECS-objekti-SDK:ssa tämä tehdään GetObjectMetadataRequest-pyynnöllä.
Jos objektia EI ole, SDK heittää seuraavan poikkeuksen 404-virhevastauksen vuoksi:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Tässä on esimerkki getObjectMetadataRequest-pyynnön käyttämisestä getObjectMetadata-asiakasmenetelmässä:
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()); }
Jos käytät AWS java SDK:ta eikä objektia ole olemassa, SDK heittää seuraavan poikkeuksen.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Tässä on esimerkki siitä:
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()); }
Tarkista, onko objekti olemassa, jotta voit määrittää, tarvitaanko putObject-kohdetta.
Jos tarkistat objektin olemassaolon selvittääksesi, tarvitaanko putObject-objektia, harkitse PutObjectRequests-ehdollisten menetelmien käyttämistä:
withIfMatch() and withIfNoneMatch().
Molemmat menetelmät tarvitsevat objektin etag-arvon, ja ne käyttävät otsikoita "if-match","if-none-match" PUT-pyynnössä.
On myös menetelmiä withIfUnmodifiedSince() ja withIfModifiedSince(), joista jokainen ottaa päivämääräobjektin.
Jos etag tai md5 ei ole käytettävissä, se on haettava GetObjectMetadataRequest-pyynnöllä.
Tehokas vaihtoehto olisi käyttää withIfUnmodifiedSince()-tiedostoa, jos päivämäärä oli tarpeeksi vanha.
SR ECS:n teknisellä tuella
Jos olet huolissasi objektin olemassaolosta, tee palvelupyyntö ECS-tukitiimille.