1.ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã¯æ°åã§ã¯ãªãæååã§ã
ã»ãšãã©ã®äŸã§ã¯ãapp.yamlããã³appengine-web.xmlã®ãversionããã£ãŒã«ãã«çªå·ããããŸãããããã¯åãªãåæäºé ã§ãã ã¢ããªã±ãŒã·ã§ã³ã®ããŒãžã§ã³ã¯ãURLã§äœ¿çšã§ããä»»æã®æååã«ããããšãã§ããŸãã ããšãã°ãããŒãžã§ã³ã«ãliveããšãdevããšããååãä»ãããšãã¢ãã¬ã¹ãlive.latestãã§äœ¿çšã§ããããã«ãªããŸãã yourapp .appspot.com "and" dev.latestã yourapp .appspot.comãã
2.ã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ãåæã«åäœããŠããå ŽåããããŸã
ãã©ã°ã©ã1ã§ç€ºåããããã«ãApp Engineã䜿çšãããšãã¢ããªã±ãŒã·ã§ã³ã®è€æ°ã®ããŒãžã§ã³ããããã€ãããããã䞊è¡ããŠæäœã§ããŸãã ãã¹ãŠã®ããŒãžã§ã³ã¯åãããŒã¿ãŠã§ã¢ããŠã¹ãšmemcacheã䜿çšããŸãããç°ãªãã€ã³ã¹ã¿ã³ã¹ã§å®è¡ãããç°ãªãURLãæã¡ãŸãã 'live'ã®ããŒãžã§ã³ã¯yourapp.appspot.comïŒããã³æ¥ç¶ããä»ã®ãã¹ãŠã®ãã¡ã€ã³ïŒã®ã¢ãã¬ã¹ãæäŸããã¢ããªã±ãŒã·ã§ã³ã®ä»ã®ãã¹ãŠã®ããŒãžã§ã³ã¯version.latest.yourapp.appspot.comã®åœ¢åŒã®ã¢ãã¬ã¹ã§å©çšã§ããŸãã è€æ°ã®ããŒãžã§ã³ã䜿çšãããšãå®éã®ããŒã¿ã§äœæ¥ç°å¢ã§æ°ãããªãªãŒã¹ããã¹ãããŠããã誰ã«ã§ãå ¬éã§ããŸãã
ã¢ããªã±ãŒã·ã§ã³ã®ç°ãªãããŒãžã§ã³ãåãèšèªã䜿çšããå¿ èŠãããªãããšã¯ããŸãç¥ãããŠããŸããïŒ Javaã§èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã®1ã€ã®ããŒãžã§ã³ãšPythonã§èšè¿°ããããã1ã€ã®ããŒãžã§ã³ãããå Žåãããã¯ããªãé¢çœãã§ãã
3. Javaã©ã³ã¿ã€ã ã¯ãJavaãã€ãã³ãŒãã«ã³ã³ãã€ã«ããããã¹ãŠã®èšèªããµããŒãããŸã
ã©ã³ã¿ã€ã ã¯JavascriptãšåŒã°ããŸãããå®éã«ã¯ãJVMãã€ãã³ãŒãã«ã³ã³ãã€ã«ãããèšèªã§AppEngineã¢ããªã±ãŒã·ã§ã³ãæžãããšã劚ãããã®ã¯ãããŸããã äžè¬ã«ããã§ã«JRubyãGroovyãScalaãRhinoïŒJavaScriptã€ã³ã¿ãŒããªã¿ãŒïŒãQuercusïŒPHPã€ã³ã¿ãŒããªã¿ãŒ/ã³ã³ãã€ã©ãŒïŒãããã«ã¯Jythonã§AppEngineã¢ããªã±ãŒã·ã§ã³ãäœæãã人ã ãããŸãã ãã®WikiããŒãžã§ã¯ ãã³ãã¥ããã£ã§äœãæ©èœããäœãæ©èœããªãã£ããã«ã€ããŠã®ç¥èãå ±æããŠããŸãã
4.æŒç®åãINãããã³ãïŒ=ãã¯ãããŒã¿ãŠã§ã¢ããŠã¹ã«å¯ŸããŠè€æ°ã®ã¯ãšãªãçæããŸã
Pythonç°å¢ã®æŒç®åãINããšãïŒ=ãã¯å®éã«SDKã«å®è£ ãããããã³ãããã®äžãã¯ããã€ãã®ã¯ãšãªã«å€æãããŸãã
ããšãã°ããSELECT * FROM People WHERE name INïŒ 'Bob'ã 'Jane'ïŒããšããã¯ãšãªã¯ããSELECT * FROM People WHERE name = 'Bob'ãããã³ãSELECT * FROM People WHERE name = 'ãã®å®è¡ã«çžåœãã2ã€ã®ã¯ãšãªã«å€æãããŸããžã§ãŒã³ãããšçµæãçµã¿åãããŸãã åæã«è€æ°ã®æŒç®åã䜿çšãããšãå¿ èŠãªã¯ãšãªã®æ°ãããã«å¢å ãããããã¯ãšãªãSELECT * FROM People WHERE name INïŒ 'Bob'ã 'Jane'ïŒAND ageïŒ= 25ãã¯ãæ¡ä»¶ã®ãã¹ãŠã®ããªã¢ã³ãã«å¯ŸããŠ4ã€ã®å®éã®ã¯ãšãªãå®è¡ããŸãïŒå¹Žéœ¢ã¯ãŸãã¯25æ³ä»¥äžã§ãååã¯ãBobããŸãã¯ãJaneãã§ãïŒããããã1ã€ã®çµæã«çµåããŸãã
ãã®ããããããã®æŒç®åã®ããã€ããåäžã®ã¯ãšãªã§äœ¿çšããªãããã«ããããšããå§ãããŸãã ããšãã°ãäžçåŒã§ã¯ãšãªã䜿çšããå°æ°ã®ã¬ã³ãŒãã®ã¿ãåºæºãæºãããšäºæ³ããå ŽåïŒäžèšã®äŸã§ã¯ã25æ³ã®äººãã»ãšãã©ããªãããšãããã£ãŠããå ŽåïŒãäžçåŒãªãã§ã¯ãšãªãå®è¡ããæ¹ãå¹ççã§ããçµæãèªåã§ç¹°ãè¿ããé©åã§ãªãã¬ã³ãŒããç Žæ£ããŸãã
5.å¹çãé«ããããã«ãããã±ãŒãžã§æ¿å ¥ãã¯ãšãªãããã³åé€ã®æäœãçµã¿åãããããšãã§ããŸã
ãã§ãããgetïŒïŒæäœãªã©ãããŒã¿ãŠã§ã¢ããŠã¹ã«ãªã¯ãšã¹ããè¡ããã³ã«ãã¢ããªã±ãŒã·ã§ã³ã¯ãã®ãªã¯ãšã¹ããããŒã¿ãŠã§ã¢ããŠã¹ã«éä¿¡ããããã§ãªã¯ãšã¹ããåŠçãããŠå¿çãè¿ãããŸãã ãã®èŠæ±ãšå¿çã®ãµã€ã¯ã«ã«ã¯æéãããããæ¬¡ã ãšå€ãã®æäœãè¡ããšããŠãŒã¶ãŒãçµæãåŸ ã€ãŸã§ã«ãããªãã®ä»å ç©ã远å ãããå¯èœæ§ããããŸãã
幞ããªããšã«ãååŸã®ã¢ãŒã·ã§ã³ã®æ°ãæžããç°¡åãªæ¹æ³ããããŸãïŒãããæäœã db.putïŒïŒãdb.getïŒïŒãdb.deleteïŒïŒã®å颿°ã¯ãéåžžã®åäžã®åŒã³åºãã«å ããŠãå ¥åãªã¹ããåãåãããšãã§ããŸãã ãªã¹ããæå®ãããšãããŒã¿ãŠã§ã¢ããŠã¹ãžã®1åã®åŒã³åºãã§ãªã¹ãå ã®ãã¹ãŠã®èŠçŽ ã䜿çšããŠæäœãå®è¡ããã䞊è¡ããŠå€ãã®æéãç¯çŽã§ããŸãã ããšãã°ã次ã®å žåçãªãœãªã¥ãŒã·ã§ã³ãèŠãŠãã ããã
for entity in MyModel.all().filter("color =", old_favorite).fetch(100): entity.color = new_favorite entity.put()
ãã®ã¹ã¿ã€ã«ã®æŽæ°ã§ã¯ãããŒã¿ãååŸããããã®ãªããžããªãžã®ã¢ã¯ã»ã¹ã«å ããŠããªããžã§ã¯ãã®æŽæ°ããšã«1ã€ã®è¿œå ã¢ã¯ã»ã¹ãå¿ èŠã§ããçµæãšããŠãªããžããªãžã®101ã¢ã¯ã»ã¹ãååŸããŸãã æ¯èŒã®ããã«ããã®äŸãèŠãŠãã ããïŒ
updated = [] for entity in MyModel.all().filter("color =", old_favorite).fetch(100): entity.color = new_favorite updated.append(entity) db.put(updated)
2è¡è¿œå ããããšã§ããªããžããªãžã®ã¢ã¯ã»ã¹æ°ã101ãã2ã«æžãããŸããïŒ
6.ããŒã¿ãŠã§ã¢ããŠã¹ã®ããã©ãŒãã³ã¹ã¯ãæ ŒçŽãããŠãããªããžã§ã¯ãã®æ°ã«äŸåããŸããã
å€ãã®äººã¯ã100,000ã100äžããŸãã¯1000äžã®ãªããžã§ã¯ããä¿åããå Žåã®ã¹ãã¬ãŒãžã®åäœãå°ããŸãã ã¹ãã¬ãŒãžã®äž»ãªå©ç¹ã®1ã€ã¯ããã®ããã©ãŒãã³ã¹ããã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠä¿åããããªããžã§ã¯ãã®æ°ã«å®å šã«äŸåããªãããšã§ãã ããã«ãApp Engineã®ãã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®å®è³ªçã«ãã¹ãŠã®ãªããžã§ã¯ãã¯ã1ã€ã®BigTableããŒãã«ã«ä¿åãããŸãïŒ ããã«ãã¯ãšãªã«é¢ããŠã¯ãããã€ãã£ãã«ãå®è¡ã§ãããã¹ãŠã®ã¯ãšãªïŒæŒç®åãINããšãïŒ=ãã䜿çšããã¯ãšãªãé€ã-äžèšåç §ïŒã®å®è¡ã³ã¹ãã¯åãã§ããã¯ãšãªã®å®è¡ã³ã¹ãã¯ã¬ã³ãŒãã®æ°ã«æ¯äŸããŸãã圌ãè¿ããŸãã
7.ã€ã³ããã¯ã¹ã®äœæã«å¿ èŠãªæéã¯ããã®ãµã€ãºã«å®å šã«ã¯äŸåããŸãã
App Engineã¢ããªã±ãŒã·ã§ã³ã«æ°ããã€ã³ããã¯ã¹ã远å ãããšãäœæã«æéããããããšããããŸãã ãã®çç±ã«ã€ããŠå°ãããšãå€ãã®äººãããŒã¿éã«èšåãããããè²»ãããæéãšæ¯èŒããŸãã ãã ããæ°ããã€ã³ããã¯ã¹ãäœæãããªã¯ãšã¹ãã¯ããã¹ãŠã®AppEngineã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ããã¯ã¹ãäœæããéäžã·ã¹ãã ã«ãã£ãŠãã¥ãŒã«å ¥ãããåŠçãããŸãã ããŒã¯æã«ã¯ãä»ã®äººãã€ã³ããã¯ã¹äœæã®ãªã¯ãšã¹ãã®åã«ããå¯èœæ§ããããŸããã€ã³ããã¯ã¹ã®äœæã¯å°ãåŸã§éå§ã§ããŸãã
8.ä¿åããŒã¿ã®éïŒãä¿åããŒã¿ãïŒã¯1æ¥ã«1åèšç®ãããŸãã
1æ¥1åãã¢ããªã±ãŒã·ã§ã³ã®ãStored Dataãã®å€ãåèšç®ããã¿ã¹ã¯ãå®è¡ããŸãã ãã®æç¹ã§ã®ããŒã¿ãŠã§ã¢ããŠã¹ã®å®éã®äœ¿çšã®å€ã䜿çšãããŸãã ãã®éã«ããããããªããžããªã®äœ¿ç𿹿³ãèæ ®ããŠãå³ãæŽæ°ããŸããããã«ãããäœ¿çšæ³ã®ãã¹ãŠã®å€æŽãéåžžã«è¿ éã«ç¢ºèªã§ããŸãã ããã¯ãå€ãã®ãªããžã§ã¯ãã倿°ã®ãªããžã§ã¯ããåé€ããåŸãã¹ãã¬ãŒãžããã°ãããæºæ¯ãã®ãŸãŸã§ãããšãã«ããã®ãããªå¹æã芳å¯ããçç±ã瀺ããŠããŸãã ãã¡ãããæ¯æãæã«ã¯ãç¢ºèªæžã¿ã®å€ã®ã¿ã䜿çšãããŸãã
9.ãã³ãã©ãŒãapp.yamlãweb.xmlãããã³appengine-web.xmlãã¡ã€ã«ã«ãªã¹ããããé åºã¯éèŠã§ã
ã¢ããªã±ãŒã·ã§ã³ãæ§æããéãå€ãã®å Žåãæ§æãã¡ã€ã«å ã®ãã³ãã©ãŒãäžããäžã«é çªã«åŠçãããããšãå¿ããŠããŸãã埮åŠãªãšã©ãŒãçºçããŸãã ããšãã°ãremote_apiãèšå®ãããšããå€ãã®äººããããè¡ããŸãã
handlers: - url: /.* script: request.py - url: /remote_api script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py login: admin
äžèŠããã¹ãŠã¯ããã§åé¡ãããŸãããããã³ãã©ãŒãé çªã«åŠçããããããrequest.pyãã³ãã©ãŒãæåã«æ€åºããããã¹ãŠã®èŠæ±ïŒremote_apiãå«ãïŒãrequest.pyãééããŸãã request.pyã¯remote_apiã«ã€ããŠäœãç¥ããªãããã404 Not Foundãšã©ãŒãè¿ããŸãã 解決çã¯ç°¡åã§ã-ãcatch everythingããã³ãã©ãŒãæåŸã«ããããšã確èªããŠãã ããã
Javaå®è¡ç°å¢ã«ãåãããšãåœãŠã¯ãŸããŸããããã1ã€ã®å¶éããããŸããappengine-web.xmlã®ãã¹ãŠã®éçãã³ãã©ãŒã¯ãweb.xmlã®åçãã³ãã©ãŒãããæ©ãåŠçãããŸãã
10. GQLã¯ãšãªãæåã§èšè¿°ããå¿ èŠã¯ãããŸãã
次ã®ãããªéåžžã«é »ç¹ãªã¢ã³ããã¿ãŒã³ã1ã€ãããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = '" + first_name + "' AND last_name = '" + last_name + "'")
ã³ãŒããã€ã³ãžã§ã¯ã·ã§ã³ã«å¯ŸããŠè匱ã«ããããšã«å ããŠãæåã®ãšã¹ã±ãŒãïŒãŠãŒã¶ãŒã®ååã«ã¢ãã¹ãããã£ãå«ãŸããŠããå Žåã¯ã©ãããã°ããã§ããããïŒã«å¯ŸåŠããå¿ èŠããããŸãã 幞ããªããšã«ãGqlQueryã¯ãã©ã¡ãŒã¿ãŒçœ®æãè¡ãããšãã§ããŸããããã¯ãæç€ºçãªæååã®è¿œå ãé¿ããããã®æšæºçãªæ¹æ³ã§ãã ãã©ã¡ãŒã¿ã®çœ®æã«ãããäžèšã®ã¯ãšãªã¯æ¬¡ã®ããã«æžãæããããšãã§ããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :1 " "AND last_name = :2", first_name, last_name)
GqlQueryã¯ãçªå·ä»ããã©ã¡ãŒã¿ãŒã«å ããŠãååä»ãã®ååãšå€ã®ãã¢ãåŒæ°ãšããŠæž¡ãããšããµããŒãããŠããŸãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :first_name " "AND last_name = :last_name", first_name=first_name, last_name=last_name)
ããã«ãããããã¯ãªãŒã³ãªã³ãŒããçæãããã ãã§ãªããè峿·±ãæé©åã䜿çšããããšãã§ããŸãã åãã¯ãšãªãç°ãªãå€ã§äœåºŠãå®è¡ããå¿ èŠãããå Žåã¯ãGqlQueryã®.bindïŒïŒã䜿çšããŠãåãªã¯ãšã¹ãã®ãã©ã¡ãŒã¿ãŒå€ããæ¥ç¶ãã§ããŸãã ããã¯ããªã¯ãšã¹ããäžåºŠã ãè§£æããå¿ èŠããããããæ¯åæ°ãããªã¯ãšã¹ããäœæãããããé«éã§ãã
q = db.GqlQuery("SELECT * FROM People " "WHERE first_name = :first_name " "AND last_name = :last_name") for first, last in people: q.bind(first, last) person = q.get() print person
æçš¿è ïŒNick JohnsonãApp EngineããŒã
Javaã¯ãSun MicrosystemsãIncã®åæšãŸãã¯ç»é²åæšã§ãã ç±³åœããã³ãã®ä»ã®åœã
PSã å¥åŠãªããšã«ãç§ã¯ããã©ããããšããã¬ãã¥ãŒãã ãã§ç³ãèš³ãªããšæããŸãããä¿èšŒä»ãã®ãå ¬éãã¯æ®å¿µã§ã¯ãããŸããã§ãããããããã¯ã¯ãŸã å ¬éãããŠããŸããïŒãã¡ãããæªå®æïŒã ç§ã¯æ¥ããããã£ããã¹ãŠã®äººã«è¬çœªããŸã-ãããŠããã»ã©ç·åŒµããªãã§ãã ãã:-)