
çŸä»£ã®Webã¢ããªã±ãŒã·ã§ã³ã§ã¯ãè€æ°ã®ãŠãŒã¶ãŒãåãããŒã¿ãåæã«æäœããå Žåã«ç¶æ³ããã°ãã°çºçããŸãã
åãŠãŒã¶ãŒã®ã¢ã¯ã·ã§ã³ã確å®ã«æåãããããã«ãã¢ããªã±ãŒã·ã§ã³éçºè
ã¯ãç¹ã«ãŠãŒã¶ãŒã®ã°ã«ãŒãã«ããããŒã¿ã®åæåŠçãæ¬åœã«å¿
èŠãªå Žåããã®ãããªã·ããªãªã®åŠçãšå®è£
ãæ
éã«æ€èšããå¿
èŠããããŸãã
ã»ãšãã©ã®å Žåãéçºè
ã¯ããŒã¿ãžã®åæã¢ã¯ã»ã¹ã管çããããã«æ¬¡ã®3ã€ã®æŠç¥ã䜿çšããŸãã
- 楜芳ç䞊è¡æ§
ã¢ããªã±ãŒã·ã§ã³ã¯ãæåŸã«ã¢ã¯ã»ã¹ãããŠããã®å€æŽããã§ãã¯ããåŸã«ã®ã¿ããŒã¿ãæŽæ°ããŸãã
ããšãã°ã2人ã®ãŠãŒã¶ãŒãåãWikiããŒãžã衚瀺ããŠãããšãã«ãåæã«ãããæŽæ°ããããšã«ããŸããã
ãã®å Žåãwikiãã©ãããã©ãŒã ã¯ã2çªç®ã®ãŠãŒã¶ãŒã®æŽæ°ãæåã®ãŠãŒã¶ãŒã®æŽæ°ã«çœ®ãæãããªãããã»ã¹ãæäŸããå¿
èŠããããäž¡æ¹ã®ãŠãŒã¶ãŒã¯ããããã®ã¢ã¯ã·ã§ã³ãå®è¡ããããã©ãããç解ããŸãã
ãã®æŠç¥ã¯ãWebã¢ããªã±ãŒã·ã§ã³ã§æãé »ç¹ã«äœ¿çšãããŸãã
- æ²èŠ³ç䞊è¡æ§
ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯æŽæ°ãããããŒã¿ããããã¯ããããã¯ã解é€ããããŸã§ãã€ãŸã æåã®ãŠãŒã¶ãŒãããŒã¿ã®ç·šéãå®äºãããŸã§ãããããžã®ã¢ã¯ã»ã¹ã¯ä»ã®ãŠãŒã¶ãŒã«å¶éãããŸãã
ããšãã°ããã¹ã¿ãŒ/ã¹ã¬ãŒãã®ããŒã¿ã¬ããªã±ãŒã·ã§ã³ã·ããªãªã§ã¯ãååãšããŠãã¹ã¿ãŒã®ã¿ãæŽæ°ãå®è¡ããä»ã®äººãããŒã¿ãç·šéã§ããªãããã«ãé·æããŒã¿ããã¯ãèšå®ã§ããã®ã¯åœŒã ãã§ãã
- æåŸã®åå©ïŒæåŸã®äœå®¶ãåå©ïŒ
ãã®ã¢ãããŒãã«ãããã¢ããªã±ãŒã·ã§ã³ãæåŸã«ã¢ã¯ã»ã¹ããŠããæŽæ°ã®ããã«ããŒã¿ããã§ãã¯ããããšãªããããŒã¿ã䜿çšããŠæäœãå®è¡ã§ããŸãã
ãã®æŠç¥ïŒãŸãã¯æ£åŒãªæŠç¥ã®æ¬ åŠïŒã¯ãéåžžãè€æ°ã®ãŠãŒã¶ãŒãåãã»ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ããå¯èœæ§ãé€å€ãããããã«ããŒã¿ãåæ£ãããå Žåã«é©çšãããŸãã
ãŸããäžèšã®æ¹æ³ã¯ãçæã®ããŒã¿ã¹ããªãŒã ã®åŠçã«åœ¹ç«ã¡ãŸãã
ãã®èšäºã§ã¯ãAzure Storageãã©ãããã©ãŒã ãããŒã¿ãŠã§ã¢ããŠã¹ã䜿çšããã¢ããªã±ãŒã·ã§ã³ã®éçºãç°¡çŽ åããåæã¢ã¯ã»ã¹ãç·šæããããã®3ã€ã®æŠç¥ãã¹ãŠããµããŒãããæ¹æ³ã«ã€ããŠèª¬æããŸãã
Azure Storage-ã¯ã©ãŠãéçºãç°¡çŽ å
Azure Storageã¯ãããŒã¿ãžã®åæã¢ã¯ã»ã¹ã«é¢ãã3ã€ã®æŠç¥ãã¹ãŠããµããŒãããŠããŸãããã¹ãã¬ãŒãžã¯ããšããšå³å¯ãªåæå®è¡ã¢ãã«çšã«èšèšãããŠããããã楜芳çããã³æ²èŠ³çåæå®è¡ããµããŒãããæ©èœãããã€ããããŸãããã®åŸãã®ããŒã¿ã«ã¢ã¯ã»ã¹ãããšãææ°ã®æŽæ°ãæ€åºãããŸãã
æŽåæ§ã¢ãã«ã䜿çšããã¹ãã¬ãŒãžãã©ãããã©ãŒã ã«ã¯ã1人ã®ãŠãŒã¶ãŒãèšé²ããæéãšæŽæ°ãããããŒã¿ãä»ã®ãŠãŒã¶ãŒã«è¡šç€ºãããæéãšã®éã®é
延ãå«ãŸããŸãã
éçºè
ã¯ãé©åãªããŒã¿ã¢ã¯ã»ã¹æŠç¥ãéžæããããšã«å ããŠãã¹ãã¬ãŒãžãã©ãããã©ãŒã ãå€æŽã®åé¢ïŒãã©ã³ã¶ã¯ã·ã§ã³å
ã®åããªããžã§ã¯ãã®éšåçãªå€æŽïŒãæŽçããæ¹æ³ã«æ³šæãæãå¿
èŠããããŸãã
Azure Storageã¯ã¹ãããã·ã§ããåé¢ã䜿çšããŠãåäžã®ããŒãã£ã·ã§ã³å
ã§åæèªã¿åããšæžã蟌ã¿ãå¯èœã«ããŸãã
ä»ã®åé¢ã¬ãã«ãšã¯ç°ãªããã¹ãããã·ã§ããã«ããåé¢ã«ãããç¹ã«æŽæ°ãã©ã³ã¶ã¯ã·ã§ã³ã®å®è¡äžã«æåŸã«ä¿åãããå€ãè¿ãå ŽåãæŽæ°ãçºçããå Žåã§ããã¹ãŠã®èªã¿åãæäœã§ããŒã¿ã®äžè²«ããã¹ãããã·ã§ããã確èªãããŸãã
BLOBãžã®åæã¢ã¯ã»ã¹ã®æ§æ
BLOBãµãŒãã¹å
ã®BLOBããã³ã³ã³ãããŒãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããããã«äœ¿çšããåææ¹åŒãéžæã§ããŸãã
æŠç¥ãæ瀺çã«æå®ããªãå Žåãããã©ã«ãã§ãæåŸã«åã€ãæŠç¥ã䜿çšãããŸãã
BLOBãšã³ã³ãããŒã®æ¥œèŠ³ç䞊è¡æ§
ã¹ãã¬ãŒãžãµãŒãã¹ã¯ãä¿åãããŠããåãªããžã§ã¯ãã«èå¥åãå²ãåœãŠãŸãã ãã®èå¥åã¯ããªããžã§ã¯ãã«å¯ŸããŠæŽæ°æäœãå®è¡ããããã³ã«æŽæ°ãããŸãã èå¥åã¯ãHTTPãããã³ã«ã§å®çŸ©ãããETagããããŒïŒãšã³ãã£ãã£ã¿ã°ïŒã䜿çšããŠãHTTP GETèŠæ±ãžã®å¿çã®äžéšãšããŠã¯ã©ã€ã¢ã³ãã«è¿ãããŸãã
ãã®ãããªãªããžã§ã¯ãã§æŽæ°ãå®è¡ãããŠãŒã¶ãŒã¯ãç¹å®ã®æ¡ä»¶äžã§ã®ã¿æŽæ°ãè¡ãããããã«ãå
ã®ETagãšãšãã«æ¡ä»¶ä»ãããããŒãéä¿¡ã§ããŸãããã®å Žåãæ¡ä»¶ã¯ã¹ãã¬ãŒãžãµãŒãã¹ã§å¿
èŠãªãIf -MatchãããããŒã§ãã
ãã®ããã»ã¹ã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
- ã¹ãã¬ãŒãžãµãŒãã¹ããblobãååŸããŸããå¿çã«ã¯ãã¹ãã¬ãŒãžãµãŒãã¹å
ã®ãªããžã§ã¯ãã®çŸåšã®ããŒãžã§ã³ãèå¥ããHTTP ETagããããŒãã©ã¡ãŒã¿ãŒãå«ãŸããŸãã
- BLOBãæŽæ°ãããšãã¯ããµãŒãã¹ã«éä¿¡ããIf - Matchãªã¯ãšã¹ãã®æ¡ä»¶ããããŒã«ãåã®ã¹ãããããåä¿¡ããETagãã©ã¡ãŒã¿ãŒãå«ããŸãã
- ãµãŒãã¹ã¯ãèŠæ±å
ã®ETagå€ãBLOBå
ã®çŸåšã®ETagå€ãšæ¯èŒããŸãã
- blobã®çŸåšã®ETagå€ãIf - MatchèŠæ±ããããŒã®ETagãšç°ãªãå Žå ããµãŒãã¹ã¯ã¯ã©ã€ã¢ã³ãã«ãšã©ãŒ412ãè¿ããŸããããã¯ãã¯ã©ã€ã¢ã³ããèŠæ±ããŠããå¥ã®ããã»ã¹ãblobãæŽæ°ããããšãã¯ã©ã€ã¢ã³ãã«ç€ºããŸãã
- çŸåšã®ETagå€ãèŠæ±ããããŒã®ETagå€ãšå€ãããªãå ŽåããµãŒãã¹ã¯èŠæ±ãããæäœãå®è¡ããçŸåšã®blob ETagå€ãæŽæ°ããŠãããŒã¿ã®æŽæ°ããã£ãããšã瀺ããŸãã
以äžã®CïŒã¹ããããã¯ã以åã«æœåºãŸãã¯ãããã«è¿œå ãããããããã£ããååŸããETagå€ã«åºã¥ããŠ
AccessConditionã¯ã©ã¹ã䜿çšããŠIf-Matchæ¡ä»¶ãäœæããç°¡åãªäŸã瀺ããŠã
ãŸã ã
次ã«ããã®æ¡ä»¶ã¯
blobã®æŽæ°äžã«
AccessConditionãªããžã§ã¯ãã䜿çšã
ãŸããAccessConditionãªããžã§ã¯ãã¯ãªã¯ãšã¹ãã«If-MatchããããŒãè¿œå ããŸãã
å¥ã®ããã»ã¹ãblobãæŽæ°ããå ŽåãblobãµãŒãã¹ã¯HTTP 412ïŒPrecondition FailedïŒã¡ãã»ãŒãžãè¿ããŸãã
å®å
šãªäŸã¯
ãã¡ãããããŠã³ããŒãã§ã
ãŸã ã
ãªããžããªãµãŒãã¹ã¯ã
If - Modified - Since ã
If - Unmodified - Since ã
If - None - Matchãªã©ã®ä»ã®æ¡ä»¶ä»ãããããŒããµããŒãããŠããŸã
ãMSDNã®è©³çŽ°æ
å ±
ããã¥ã¡ã³ã ã
次ã®è¡šã¯ãèŠæ±ã§
If - Matchãªã©ã®æ¡ä»¶ä»ãããããŒãåãå
¥ããå¿çã§ETagãè¿ãã³ã³ããæäœã瀺ããŠããŸãã
éå¶ | ETagã è¿ããŸã | æ¡ä»¶ä»ãããããŒãåãå
¥ããŸã |
ã³ã³ãããäœæ | ã¯ã | ãã |
ã³ã³ããã®ããããã£ãååŸ | ã¯ã | ãã |
ã³ã³ããã¡ã¿ããŒã¿ã®ååŸ | ã¯ã | ãã |
ã³ã³ããã®ã¡ã¿ããŒã¿ãèšå®ãã | ã¯ã | ã¯ã |
ã³ã³ããACLãååŸ | ã¯ã | ãã |
ã³ã³ããACLãèšå®ããŸã | ã¯ã | ã¯ãïŒ*ïŒ |
ã³ã³ãããåé€ | ãã | ã¯ã |
ãªãŒã¹ã³ã³ãã | ã¯ã | ã¯ã |
BLOBãäžèŠ§è¡šç€ºãã | ãã | ãã |
ïŒ*ïŒSetContainerACLã§å®çŸ©ãããæš©éã¯ãã£ãã·ã¥ãããæŽæ°ã«ã¯30ç§ããããŸãããã®éãæŽæ°ã®äžè²«æ§ã¯ä¿èšŒãããŸããã
ãã®è¡šã¯ãIf-Matchãªã©ã®ãªã¯ãšã¹ãã§æ¡ä»¶ä»ãããããŒãåãå
¥ããETagå€ãè¿ãblobæäœã瀺ããŠããŸãã
éå¶ | ETagãè¿ããŸã | æ¡ä»¶ä»ãããããŒãåãå
¥ããŸã |
ããããå
¥ãã | ã¯ã | ã¯ã |
ããããååŸãã | ã¯ã | ã¯ã |
Blobããããã£ãååŸ | ã¯ã | ã¯ã |
BLOBããããã£ãèšå®ãã | ã¯ã | ã¯ã |
BLOBã¡ã¿ããŒã¿ãååŸãã | ã¯ã | ã¯ã |
BLOBã¡ã¿ããŒã¿ãèšå®ãã | ã¯ã | ã¯ã |
ãªãŒã¹ãããïŒ*ïŒ | ã¯ã | ã¯ã |
ã¹ãããã·ã§ããBLOB | ã¯ã | ã¯ã |
ããããã³ã㌠| ã¯ã | ã¯ãïŒãœãŒã¹ããã³å®å
BLOBã®å ŽåïŒ |
ã³ããŒBLOBã®äžæ¢ | ãã | ãã |
ããããåé€ | ãã | ã¯ã |
ãããã¯ã眮ã | ãã | ãã |
ãããã¯ãªã¹ãã眮ã | ã¯ã | ã¯ã |
ãããã¯ãªã¹ããååŸãã | ã¯ã | ãã |
ããŒãžã眮ã | ã¯ã | ã¯ã |
ããŒãžç¯å²ãååŸãã | ã¯ã | ã¯ã |
ïŒ*ïŒBlobãªãŒã¹ã¯Etagãå€æŽããŸããã
BLOBã§ã®æ²èŠ³ç䞊è¡æ§
blobãæä»çã«ãããã¯ããã«ã¯ããªãŒã¹ã¡ã«ããºã ã䜿çšãããŸãã ãªãŒã¹ã䜿çšããå Žåãæéã15ã60ç§ããŸãã¯çµäºãªãã§æå®ããŸããããã¯æä»çãããã¯ãæå³ããŸãã ãŸããããã¯ãæ¡åŒµããããäœæ¥ãå®äºããåŸã«BLOBã®ããã¯ã解é€ãããããããšãã§ããŸãã blobãµãŒãã¹ã®æå¹æéãåãããšãblobãµãŒãã¹ã¯èªåçã«ãªãŒã¹ãç¡å¹ã«ããŸãã
ãªãŒã¹ã䜿çšãããšãæä»çæžã蟌ã¿/åå²èªã¿åããæä»çæžã蟌ã¿/æä»çèªã¿åããåå²æžã蟌ã¿/æä»çèªã¿åããªã©ãããŸããŸãªåææŠç¥ã䜿çšã§ããŸãã
ãªãŒã¹ãååšããå Žåãã¹ãã¬ãŒãžãµãŒãã¹ã¯æä»çãšã³ããªïŒputãsetãdeleteæäœïŒãæŽçããŸãã èªã¿åãæäœã®æä»æ§ã確ä¿ããããã«ãéçºè
ã¯ãã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ããªãŒã¹èå¥åã䜿çšããäžåºŠã«1人ã®ã¯ã©ã€ã¢ã³ãã®ã¿ãé©åãªãªãŒã¹èå¥åãæã€ããã«ããå¿
èŠããããŸãã ãªãŒã¹èå¥åãå«ãŸãªãèªã¿åãæäœã¯ãå
±æèªã¿åãã§çºçããŸãã
以äžã®ã³ãŒãïŒCïŒïŒã¯ãBlobã§ã®æä»çãª30ç§ã®ãªãŒã¹ãBlobã®æŽæ°ããªãŒã¹ã®çµäºã瀺ããŠããŸãã blobã«å¿
èŠãªãªãŒã¹ãæ¢ã«ã€ã³ã¹ããŒã«ãããŠããå Žåãæ°ãããã®ãã€ã³ã¹ããŒã«ããããšãããšãblobãµãŒãã¹ã¯ãHTTPïŒ409ïŒConflictããšããçµæãè¿ããŸãã
ã¹ãã¬ãŒãžãµãŒãã¹ã®BLOBãæŽæ°ããèŠæ±ãäœæãããšããã³ãŒãã§ã¯ããªãŒã¹ã«é¢ããæ
å ±ã®ããã«ãAccessConditionãªããžã§ã¯ãã䜿çšãããŸãã
å®å
šãªäŸã¯
ãã¡ãããããŠã³ããŒãã§ã
ãŸã ã
ãªãŒã¹èå¥åãéä¿¡ããã«ãªãŒã¹ã§blobã«æžã蟌ã¿æäœãå®è¡ãããšããªã¯ãšã¹ãã¯ãšã©ãŒ412ã§å€±æããŸã
ãUploadTextã¡ãœããã
åŒã³åºãããåã«ãªãŒã¹ãæéåãã«ãªãããªãŒã¹èå¥åãæž¡ããšããªã¯ãšã¹ãã¯ãšã©ãŒ412ã§å床倱æããŸãã
ãªãŒã¹æéãšãªãŒã¹èå¥åã®ç®¡çã«ã€ããŠã¯ã
ããã¥ã¡ã³ããåç
§ããŠãã ããã
次ã®ãªã¹ãã¯ãæ²èŠ³ç䞊è¡æ§ã®ããã«ãªãŒã¹ã䜿çšã§ããblobæäœã瀺ããŠããŸãã
- ããããå
¥ãã
- ããããååŸãã
- Blobããããã£ãååŸ
- BLOBããããã£ãèšå®ãã
- BLOBã¡ã¿ããŒã¿ãååŸãã
- BLOBã¡ã¿ããŒã¿ãèšå®ãã
- ããããåé€
- ãããã¯ã眮ã
- ãããã¯ãªã¹ãã眮ã
- ãããã¯ãªã¹ããååŸãã
- ããŒãžã眮ã
- ããŒãžç¯å²ãååŸãã
- ã¹ãããã·ã§ããBLOB-ãªãŒã¹IDã¯äžèŠ
- Blobã®ã³ããŒ-Blobã§ãªãŒã¹ã確ç«ãããå Žåãèå¥åãå¿
èŠã§ã
- ã³ããŒBLOBã®äžæ¢-ç¡å¶éã®ãªãŒã¹ãBLOBã«ã€ã³ã¹ããŒã«ãããŠããå Žåãèå¥åãå¿
èŠã§ã
- ãªãŒã¹ããã
ã³ã³ããã®æ²èŠ³ç䞊è¡æ§
ã³ã³ããã®ãªãŒã¹ã¯ãããããšåãåææŠç¥ïŒæä»çæžã蟌ã¿/åå²èªã¿åããæä»çæžã蟌ã¿/æä»çèªã¿åããããã³åå²æžã蟌ã¿/æä»çèªã¿åãïŒã®ãµããŒããæäŸããŸãããããããšã¯ç°ãªããã¹ãã¬ãŒãžãµãŒãã¹ã¯åé€æäœã«æä»çæŠç¥ã䜿çšããŸãã
ã¢ã¯ãã£ããªãªãŒã¹ãæã€ã³ã³ãããåé€ããã«ã¯ãã¯ã©ã€ã¢ã³ãã¯åé€ãªã¯ãšã¹ãã«ã¢ã¯ãã£ããªãªãŒã¹èå¥åãå«ããå¿
èŠããããŸãã
ãªãŒã¹ã³ã³ããã«å¯Ÿããä»ã®æäœã«ã¯ãå¿
ããããªãŒã¹èå¥åãå«ããå¿
èŠã¯ãªãããã®ãããªæäœã¯å
±æãšåŒã°ããŸãã
æä»çãªæŽæ°ïŒputãŸãã¯setïŒãŸãã¯èªã¿åãæäœãå¿
èŠãªå Žåãéçºè
ã¯åã¯ã©ã€ã¢ã³ãããªãŒã¹èå¥åã䜿çšãã1ã€ã®ã¯ã©ã€ã¢ã³ãã®ã¿ãçŸåšé©åãªèå¥åã䜿çšããå¿
èŠããããŸãã
以äžã¯ãæ²èŠ³çãªåæå®è¡æ§ã®ããã«ãªãŒã¹ã䜿çšã§ããã³ã³ããæäœã§ãã
- ã³ã³ãããåé€
- ã³ã³ããã®ããããã£ãååŸ
- ã³ã³ããã¡ã¿ããŒã¿ã®ååŸ
- ã³ã³ããã®ã¡ã¿ããŒã¿ãèšå®ãã
- ã³ã³ããACLãååŸ
- ã³ã³ããACLãèšå®ããŸã
- ãªãŒã¹ã³ã³ãã
è¿œå æ
å ±ïŒ
ããŒãã«ãµãŒãã¹ã§ã®åæå®è¡æ§ã®æŽç
ãšã³ãã£ãã£ãæäœããå ŽåãããŒãã«ãµãŒãã¹ã¯ããªããã£ãã¹ãã£ãã¯ãªåæå®è¡æ§ãæ瀺çã«éžæããå¿
èŠãããblobãµãŒãã¹ãšã¯ç°ãªããããã©ã«ãã§ã¯ãããŒã¿ãžã®åæã¢ã¯ã»ã¹ã«ãªããã£ãã¹ãã£ãã¯æŠç¥ã䜿çšããŸãã
ããŒãã«ãµãŒãã¹ãšBLOBãµãŒãã¹ã®ãã1ã€ã®éãã¯ãããŒãã«ã§ã¯ãšã³ãã£ãã£ã«å¯ŸããŠã®ã¿äžŠåã¢ã¯ã»ã¹ã®åäœãå¶åŸ¡ã§ããBLOBãµãŒãã¹ã§ã¯ã³ã³ãããŒãšBLOBã«ã¢ã¯ã»ã¹ãããšãã®åæå®è¡ãå¶åŸ¡ã§ããããšã§ãã
楜芳çåæå®è¡æ§ã䜿çšãããšã³ãã£ãã£ãããŒãã«ãµãŒãã¹ããéžæãããŠããå¥ã®ããã»ã¹ã«ãã£ãŠå€æŽããããã©ããã確èªããã«ã¯ãéžæäžã«ååŸããETagå€ã䜿çšã§ããŸãã
ãã®ããã»ã¹ã®æŠèŠã以äžã«ç€ºããŸãã
- ããŒãã«ã¹ãã¬ãŒãžãµãŒãã¹ããã®ãšã³ãã£ãã£ã®ååŸã å¿çã«ã¯ãETagå€ïŒãªããžããªå
ã®ãšã³ãã£ãã£ã«é¢é£ä»ããããŠããçŸåšã®èå¥åïŒãå«ãŸããŸãã
- ãšã³ãã£ãã£ãæŽæ°ãããšãããµãŒãã¹ã«éä¿¡ããIf - Matchãªã¯ãšã¹ãã®æ¡ä»¶ããããŒã«ãåã®ã¹ãããããåä¿¡ããETagãã©ã¡ãŒã¿ãŒãå«ããŸãã
- ãµãŒãã¹ã¯ããªã¯ãšã¹ãå
ã®ETagå€ããšã³ãã£ãã£ã®çŸåšã®ETagå€ãšæ¯èŒããŸãã
- ãšã³ãã£ãã£ã®çŸåšã®ETagå€ãIf - Matchãªã¯ãšã¹ãããããŒã®ETagãšç°ãªãå Žå ããµãŒãã¹ã¯ã¯ã©ã€ã¢ã³ãã«ãšã©ãŒ412ãè¿ããŸããããã¯ãã¯ã©ã€ã¢ã³ããèŠæ±ããŠããå¥ã®ããã»ã¹ããšã³ãã£ãã£ãæŽæ°ããããšãã¯ã©ã€ã¢ã³ãã«ç€ºããŸãã
- çŸåšã®ETagå€ãIf - MatchãŸãã¯If - MatchèŠæ±ããããŒã®èšå·ïŒ*ïŒã®ETagå€ãšå€ãããªãå ŽåããµãŒãã¹ã¯èŠæ±ãããæäœãå®è¡ãããšã³ãã£ãã£ã®çŸåšã®ETagãæŽæ°ããŠããŒã¿ãæŽæ°ãããããšã瀺ããŸãã
BLOBãµãŒãã¹ãšã¯ç°ãªããããŒãã«ãµãŒãã¹ã§ã¯ãæŽæ°ãªã¯ãšã¹ãã«
If - MatchããããŒãå«ããå¿
èŠããããŸãã ãã ããç¡æ¡ä»¶ã®æŽæ°ïŒãæåŸã«åã€ãæŠç¥ïŒã匷å¶ããã¯ã©ã€ã¢ã³ããèŠæ±å
ã®
If - MatchããããŒ
å€ãã·ã³ãã«ïŒ*ïŒã«èšå®ãããšãã«ãã§ãã¯ããã€ãã¹ããããšã¯å¯èœã§ãã
以äžã®ã³ãŒãïŒCïŒïŒã¯ãæŽæ°ãããé»åã¡ãŒã«ã¢ãã¬ã¹ãæã€æ¢åã®ããŒã¿ããäœæãŸãã¯éžæããã顧客ãšã³ãã£ãã£ã瀺ããŠããŸãã æåã®æ¿å
¥ãŸãã¯ååŸæäœã§ã¯ãETagå€ã顧客ãªããžã§ã¯ãã«ä¿åããŸãããã®äŸã§ã¯ã眮ææäœäžã«ãªããžã§ã¯ãã®åãã€ã³ã¹ã¿ã³ã¹ã䜿çšãããããETagå€ãããŒãã«ãµãŒãã¹ã«èªåçã«è¿ããããµãŒãã¹ã¯ã¢ã¯ã»ã¹äžã«éåããã§ãã¯ã§ããŸãã
å¥ã®ããã»ã¹ãããŒãã«ã¹ãã¢å
ã®ãšã³ãã£ãã£ãæŽæ°ããå ŽåããµãŒãã¹ã¯ã¹ããŒã¿ã¹ãHTTP 412ïŒåææ¡ä»¶å€±æïŒã®ã¡ãã»ãŒãžãè¿ããŸãã
å®å
šãªäŸã¯
ãã¡ãããå
¥æã§ã
ãŸãã try { customer.Email = "updatedEmail@contoso.org"; TableOperation replaceCustomer = TableOperation.Replace(customer); customerTable.Execute(replaceCustomer); Console.WriteLine("Replace operation succeeded."); } catch (StorageException ex) { if (ex.RequestInformation.HttpStatusCode == 412) Console.WriteLine("Optimistic concurrency violation â entity has changed since it was retrieved."); else throw; }
åæã¢ã¯ã»ã¹ãã§ãã¯ãæ瀺çã«ãããã¯ããã«ã¯ãæŽæ°æäœãå®è¡ããåã«åŸæ¥å¡ãªããžã§ã¯ãã®ETagããããã£ãã*ãã«èšå®ããå¿
èŠããããŸãã
customer.ETag =â *â;è¡šã¯ãè¡šæäœãETagå€ã䜿çšããæ¹æ³ã瀺ããŠããŸãã
éå¶ | ETagãè¿ããŸã | æ¡ä»¶ä»ã ããã㌠ãå¿
èŠ |
ã¯ãšãªãšã³ãã£ã㣠| ã¯ã | ãã |
ãšã³ãã£ãã£ãæ¿å
¥ | ã¯ã | ãã |
ãšã³ãã£ãã£ãæŽæ° | ã¯ã | ã¯ã |
ãšã³ãã£ãã£ãçµå | ã¯ã | ã¯ã |
ãšã³ãã£ãã£ãåé€ | ãã | ã¯ã |
ãšã³ãã£ãã£ã®æ¿å
¥ãŸãã¯çœ®æ | ã¯ã | ãã |
ãšã³ãã£ãã£ã®æ¿å
¥ãŸãã¯ããŒãž | ã¯ã | ãã |
ãšã³ãã£ãã£ã®
æ¿å
¥ ãŸã㯠眮æããã³
ãšã³ãã£ãã£ã® æ¿å
¥ ãŸã㯠ããŒãžæäœ
㯠ãããŒãã«ãµãŒãã¹ã«ETagå€ãéä¿¡ããªããããåæã¢ã¯ã»ã¹ãã§ãã¯ã
å®è¡ããªãããšã«æ³šæããŠãã ããã
éåžžãããŒãã«ã䜿çšããéçºè
ã¯ãã¹ã±ãŒã©ãã«ãªã¢ããªã±ãŒã·ã§ã³ãéçºããå ŽåãããŒã¿ãžã®åæã¢ã¯ã»ã¹ã«ã€ããŠæ¥œèŠ³çãªæŠç¥ã«äŸåããå¿
èŠããããŸãã
æ²èŠ³çããã¯ãå¿
èŠãªå Žåãéçºè
ãããŒãã«ã«ã¢ã¯ã»ã¹ããããã®é©åãªãªãã·ã§ã³ã¯ãåããŒãã«ã«ç¹å¥ãªblobãå²ãåœãŠãããŒãã«ã«å¯Ÿããåæäœã®åã«ããããªãŒã¹ããããšããããšã§ãã
ãã®ã¢ãããŒãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ãããŒãã«ãžã®ã¢ã¯ã»ã¹ãblobããªãŒã¹ããããã®äºåçãªè©Šã¿ãä»ããŠè¡ãããããšãä¿èšŒããå¿
èŠããããŸãã
ãŸããæå°ãªãŒã¹æéã¯15ç§ã§ãããããã¹ã±ãŒã©ãã«ãªãœãªã¥ãŒã·ã§ã³ãéçºããéã«ã¯ç¹å¥ãªæ³šæãå¿
èŠã§ãã
è¿œå æ
å ±ïŒ
ãã¥ãŒã¹ãã¬ãŒãžãµãŒãã¹ã§ã®åæå®è¡æ§ã®æŽç
ãã¥ãŒã®å Žåã䞊åã¢ã¯ã»ã¹æŠç¥ã䜿çšããå¿
èŠãããã·ããªãªã1ã€ãããŸããããã¯ãè€æ°ã®ã¯ã©ã€ã¢ã³ãããã¥ãŒããåæã«ã¡ãã»ãŒãžãæœåºããå Žåã§ãã ã¡ãã»ãŒãžããã¥ãŒããååŸããããšãå¿çã«ã¯ã¡ãã»ãŒãžèªäœãšãåŸã§ã¡ãã»ãŒãžãåé€ããããã«å¿
èŠãªãããåä¿¡å€ãå«ãŸããŸãã
ã¡ãã»ãŒãžã¯ãã¥ãŒããèªåçã«åé€ãããŸããããååŸãããåŸãäžå®æéå¯èŠæ§ã¿ã€ã ã¢ãŠãã®éã¯ã©ã€ã¢ã³ãã«è¡šç€ºãããŸãã
ã¡ãã»ãŒãžãåä¿¡ããã¯ã©ã€ã¢ã³ãã¯ãã¡ãã»ãŒãžãåŠçãããŠããå¿çå
ã®TimeNextVisibleèŠçŽ ã«ãã£ãŠæ±ºå®ãããç¬éãŸã§ãã¡ãã»ãŒãžãåé€ãããããšãæåŸ
ããŠããŸãã
TimeNextVisibleãå®çŸ©ããããã«ãã¡ãã»ãŒãžãååŸãããæå»ã«visibilitytimeoutå€ãè¿œå ãããŸãã
ãã¥ãŒã¹ãã¬ãŒãžãµãŒãã¹ã¯æ¥œèŠ³çãŸãã¯æ²èŠ³çæŠç¥ããµããŒãããŠããªãããããã¥ãŒããååŸããã¡ãã»ãŒãžãåŠçããã¯ã©ã€ã¢ã³ãã¯ãã¡ãã»ãŒãžãåŠçããã¹ãçã¹ãæ¹æ³ãæäŸããå¿
èŠããããŸãã
SetQueueServicePropertiesãSetQueueMetaDataãSetQueueACLãUpdateMessageãªã©ã®æŽæ°æäœã§ã¯ããwin lastãæŠç¥ã䜿çšãããŸãã
è¿œå æ
å ±ïŒ
ãã¡ã€ã«ãã«ããµãŒãã¹ã§ã®åæå®è¡æ§ã®æŽç
ãã¡ã€ã«ãµãŒãã¹ã«ã¯ãSMBãšRESTã®2ã€ã®ç°ãªããããã³ã«ã䜿çšããŠã¢ã¯ã»ã¹ã§ããŸãã RESTãµãŒãã¹ã¯æ¥œèŠ³çãŸãã¯æ²èŠ³çããããã³ã°ããµããŒãããŠãããããã¹ãŠã®æŽæ°ã¯ãæåŸã«åã€ãæŠç¥ã«åºã¥ããŠããŸãã
SMBã䜿çšããã¯ã©ã€ã¢ã³ãã¯ããã¡ã€ã«ã·ã¹ãã ã¬ãã«ã§ããã¯ã¡ã«ããºã ã䜿çšããŠãæ²èŠ³çãªããã¯ã®å¯èœæ§ãå«ãå
±æãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ã§ããŸãã
SMBã¯ã©ã€ã¢ã³ãããã¡ã€ã«ãéããšããã¡ã€ã«ã¢ã¯ã»ã¹èšå®ãšå
±æã¢ã¯ã»ã¹ã¢ãŒãã決å®ãããŸãã ãã¡ã€ã«ã¢ã¯ã»ã¹ãªãã·ã§ã³ããæžã蟌ã¿ããŸãã¯ãèªã¿åã/æžã蟌ã¿ãã«èšå®ããå
±æã¢ã¯ã»ã¹ã¢ãŒããããªããã«èšå®ããçµæããã¡ã€ã«ã¯SMBã¯ã©ã€ã¢ã³ãã«ãã£ãŠéãããããŸã§ãããã¯ãããŸãã
SMBã¯ã©ã€ã¢ã³ãã«ãã£ãŠããã¯ããããã¡ã€ã«ã§RESTæäœãå®è¡ããããšãRESTãµãŒãã¹ã¯ã³ãŒããSharing Violationãã§ãšã©ãŒ409ãè¿ããŸãã
SMBã¯ã©ã€ã¢ã³ããåé€ã®ããã«ãã¡ã€ã«ãéããšãä»ã®ãã¹ãŠã®SMBã¯ã©ã€ã¢ã³ãããã®ãã¡ã€ã«ãéãããŸã§ããã®ãã¡ã€ã«ã¯ãåé€ä¿çããšããŠããŒã¯ãããŸãã ãã¡ã€ã«ãåé€åŸ
ã¡ãšããŠããŒã¯ãããŠããéãããã®ãã¡ã€ã«ã«å¯ŸããRESTæäœã¯SMBDeletePendingã³ãŒãã§409ãšã©ãŒãè¿ããŸãã SMBã¯ã©ã€ã¢ã³ãããã¡ã€ã«ãéããåã«åé€ä¿çãã©ã°ãã¯ãªã¢ããå¯èœæ§ãããããããšã©ãŒã³ãŒã404ïŒèŠã€ãããŸããïŒã¯è¿ãããŸããã ã€ãŸãããšã©ãŒã³ãŒã404ã¯ããã¡ã€ã«ãæ¬åœã«åé€ãããå Žåã«ã®ã¿è¿ãããŸãã
ãã¡ã€ã«ãSMBã¯ã©ã€ã¢ã³ãã«ããåé€ãä¿çãããŠããéãList Filesåºåã®çµæã«å«ãŸããªãããšã«æ³šæããŠãã ããã
ãŸããRESTã®[ãã¡ã€ã«ã®åé€]ããã³[ãã£ã¬ã¯ããªã®åé€]æäœã¯ã¢ãããã¯ã«å®è¡ãããã¹ããŒã¿ã¹ã[ä¿çäžã®åé€]ã«èšå®ãããªãããšã«çæããå¿
èŠããããŸãã
è¿œå æ
å ±ïŒ
ãããã«
Microsoft Azure Cloud Storageã¯ãè€éãªWebã¢ããªã±ãŒã·ã§ã³ã®ããŒãºãæºããããã«èšèšãããŸããã åæã«ãéçºè
ã¯ãããŒã¿ãžã®åæã¢ã¯ã»ã¹ãããŒã¿ã®æ£ããç¶æ
ã®ç¢ºä¿ãªã©ãäž»èŠãªèšèšãã¿ãŒã³ãç ç²ã«ãããåèãããããå¿
èŠã¯ãããŸããã ãããã®ããããžã§ãã³ã°ã®ã¡ã«ããºã ã¯ããªããžããªèªäœã«å«ãŸããŠããŸãã
ãã®èšäºã§äœ¿çšãããŠããã¢ããªã±ãŒã·ã§ã³ã®å®å
šãªäŸïŒ
Azureã¹ãã¬ãŒãžã®è©³çŽ°ïŒ
䟿å©ãªãªã³ã¯