ECS: Kontrola existence objektu S3
Summary: Jak zkontrolovat existenci objektu v s3.
Instructions
Použití HEAD k efektivnější kontrole existence objektu.
Výpis objektů je ze své podstaty neefektivní způsob kontroly existence konkrétního objektu. Vyhledávání v indexu je pro tento konkrétní požadavek nejen relativně pomalé, ale může mít také vliv na celkové zatížení a výkon.
Požadavek na konkrétní objekt je vždy efektivnější než požadavek na jeden nebo více objektů, které odpovídají parametrům. Výpis objektů je forma vyhledávání, kde je nutné dotazovat distribuované indexy.
Použití HEAD na objekt je nejlepší metodou, jak zkontrolovat, zda existuje. U sady ECS Object SDK se to provádí pomocí GetObjectMetadataRequest.
Pokud objekt neexistuje, sada SDK vyvolá následující výjimku kvůli chybové odpovědi 404:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
Tady je příklad použití GetObjectMetadataRequest , který se používá v getObjectMetadata klientské metodě:
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()); }
Pokud používáte sadu AWS Java SDK a objekt neexistuje, sada SDK vyvolá následující výjimku.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
Zde je příklad:
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()); }
Zkontrolujte, zda objekt existuje, a zjistěte, zda je potřeba putObject.
Pokud kontrolujete existenci objektu, abyste zjistili, zda je potřeba putObject, zvažte použití podmíněných metod PutObjectRequests:
withIfMatch() and withIfNoneMatch().
Obě tyto metody potřebují hodnotu object etag a používají hlavičky "if-match","if-none-match" v požadavku PUT.
Existují také metody withIfUnmodifiedSince() a withIfModifiedSince(), z nichž každá přebírá objekt Date.
Pokud značka etag nebo md5 nejsou k dispozici, je potřeba ji načíst pomocí GetObjectMetadataRequest.
Efektivní alternativou by bylo použít withIfUnmodifiedSince(), pokud je datum dostatečně staré.
Servisní služby s technickou podporou ECS
Pokud máte obavy ohledně existence objektu, otevřete servisní požadavek u týmu podpory ECS.