Google Cloud PlatformãµãŒãã¹ã䜿çšãããšããªã³ã©ã€ã³ã¹ãã¢ã«å¹æçã§ã¹ã±ãŒã©ãã«ãªæšå¥šã·ã¹ãã ãäœæã§ããŸãã
é»ååååŒåžå Žã§ã¯è峿·±ãç¶æ³ãçºçããŠããŸãã ç·ãã£ãã·ã¥ãããŒã¯å¢å ããŠããŸããã売ãæã®æ°ãå¢å ããŠããŸãã ããã«ãããååºèã®ã·ã§ã¢ãäœäžããç«¶åãæ¿åããŠããŸãã å¹³å賌å
¥ãµã€ãºïŒãããã£ãŠå©çïŒãå¢ãã1ã€ã®æ¹æ³ã¯ã顧客ã«èå³ã®ãã远å ã®è£œåãæäŸããããšã§ãã
ãã®èšäºã§ã¯ãCloud Platformã«åºã¥ããŠç°å¢ãèšå®ããåºæ¬çãªæšå¥šã·ã¹ãã ããµããŒãããæ¹æ³ãåŠç¿ããŸããåºæ¬çãªæšå¥šã·ã¹ãã ã¯ãããã«éçºããã³æ¡åŒµã§ããŸãã
ãŠãŒã¶ãŒã«æšå¥šäºé
ãéžæããŠæäŸã§ããäžåç£è³è²žä»£çåºã®Webãµã€ãã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã

Google Cloud PlatformãåããŠäœ¿çšããå Žåã¯ãäžé£ã®ãŠã§ãããŒãã芧ãã ãã[1æ19æ¥ãæšææ¥ã11ïŒ00ã¢ã¹ã¯ã¯æé] Google Cloud Platformæ©èœã®æŠèŠ
- Google Cloud Platformãšã¯äœã§ããããã®å©ç¹ãšç¬èªã®æ©èœã¯äœã§ãã
- Googleã¯ã©ãŠãã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ã®æŠèŠïŒIaaS / PaaSãã¹ãã¬ãŒãžããããã¯ãŒã¯ïŒ
- Google Cloudã®ããã°ããŒã¿ã𿩿¢°åŠç¿ãµãŒãã¹ã®æŠèŠ
ãŠã§ãããŒãšã³ããªãžã®ãªã³ã¯
[2æ3æ¥ãéææ¥ã11ïŒ00ã¢ã¹ã¯ã¯æé] Google Cloud Platformã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹
- Infrastructure as a ServiceïŒIaaSïŒïŒè³è²žçšã®ã³ã³ãã¥ãŒãã£ã³ã°ãã¯ãŒã®æäŸ
- Google App EngineããŒã¹ã®NoOps / PaaSãœãªã¥ãŒã·ã§ã³
- Google Container Engine-Docker Container Orchestrationãœãªã¥ãŒã·ã§ã³
ãŠã§ãããŒãšã³ããªãžã®ãªã³ã¯
[2æ17æ¥ãéææ¥ã11ïŒ00ã¢ã¹ã¯ã¯æé] Google Cloud Platformã®ããã°ããŒã¿ã𿩿¢°åŠç¿ããŒã«
- BigQuery-ã¯ã©ãŠãã«å€§éã®ããŒã¿ãä¿åããã³ååŸããããã®ããŒã¿ãŠã§ã¢ããŠãžã³ã°ãœãªã¥ãŒã·ã§ã³
- Dataproc-Cloud Hadoopã¯ã©ã¹ã¿ãŒ
- ããŒã¿ãããŒ-ã¹ããªãŒãã³ã°ããã³ãã±ããããŒã¿ãåŠçããããã®ETLããŒã«
- CloudML-æ©æ¢°åŠç¿ã¢ãã«ãéçºããã³ãã¬ãŒãã³ã°ããããã®ãã©ãããã©ãŒã
- ãŸãããã®ãŠã§ãããŒã§ã¯ãGCPã§ã¹ãã¬ãŒãžãµãŒãã¹ã䜿çšããããŸããŸãªåŽé¢ã«ã€ããŠèª¬æããŸã
ãŠã§ãããŒãšã³ããªãžã®ãªã³ã¯
[3æ2æ¥ãæšææ¥ã11ïŒ00ã¢ã¹ã¯ã¯æé] ã¯ãŒã¯ã·ã§ããïŒGoogle Cloud PlatformãµãŒãã¹ã®ãã¥ãŒããªã¢ã«
- Google Compute Engine-ä»®æ³ãã·ã³ã®ç®¡çã°ã«ãŒãã§ã¿ã¹ã¯ãèµ·åããã°ããŒãã«ãªè² è·åæ£ãšèªåã¹ã±ãŒãªã³ã°
- Google App Engine-Google PaaSãã©ãããã©ãŒã ã§ã®Webã¢ããªã±ãŒã·ã§ã³ã®å埩çãªéçºãšå±é
|
ãŠã§ãããŒãªãŒã |
---|
ãªã¬ã°ã»ã€ããã³ @GoogleAmsterdam
 ã¯ã©ãŠãWebãœãªã¥ãŒã·ã§ã³ãšã³ãžã㢠Olegã¯ãæ§æã®ã³ã¹ããåæããGoogle Cloud Platformã«åºã¥ãã¯ã©ãŠããœãªã¥ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ãèšç»ããããã®ããŒã«ãéçºããŠããŸãã Olegã®éçºã¯ãGoogle Cloud Platform Pricing Calculatorãªã©ã®å
¬éãããŠããGCPããŒã«ã§äœ¿çšãããŠããŸã | ããããªãŒã»ããŽã¡ã³ãã¹ã㌠@GoogleAmsterdam
 ã«ã¹ã¿ããŒãšã³ãžã㢠Dmitryã¯ãGoogle Cloud Platformã®ããžãã¹é¡§å®¢åãã®è²©å£²ãµããŒããšã¢ãŒããã¯ãã£ãœãªã¥ãŒã·ã§ã³ã«åŸäºããŠããŸãã Dmitryã®äž»ãªçŠç¹ã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ãµãŒãã¹ã®åéã«ãããŸãïŒGoogle Compute EngineïŒGCEïŒãGoogle App EngineïŒGAEïŒãGoogle Container EngineïŒGKE / KubernetesïŒã
|
ããããããã®èšäºãèªãã§ãGoogle Cloud Platformã§ãã®ã·ããªãªãåäœæããããšããå§ãããŸãã ãªã³ã¯ãã¯ãªãã¯ãããšãGCPãµãŒãã¹ã60æ¥éãã¹ãããããã®300ãã«ãåãåããŸã |
ã¹ã¯ãªãã
ã¢ã³ãã¯å°çšãµã€ãã§å¥èãæ¢ããŠããŸãã 以åã¯ã圌女ã¯ãã§ã«ãã®ãµã€ãããäœå®
ãåããŠããã€ãã®ã¬ãã¥ãŒãæ®ããŠãããããã·ã¹ãã ã«ã¯åœŒå¥³ã®å¥œã¿ã«åºã¥ããŠæšå¥šäºé
ãéžæããã®ã«ååãªããŒã¿ããããŸãã ã¢ã³ãã®ãããã£ãŒã«ã®æšå®ãã倿ãããšã圌女ã¯éåžžãã¢ããŒãã§ã¯ãªãå®¶ãåããŠããŸãã ã·ã¹ãã ã¯ã圌女ã«åãã«ããŽãªã®äœããæäŸããå¿
èŠããããŸãã
ãœãªã¥ãŒã·ã§ã³ã®æŠèŠ
ãªã¢ã«ã¿ã€ã ïŒãµã€ãäžïŒãŸãã¯äºåŸïŒé»åã¡ãŒã«çµç±ïŒã§æšå¥šäºé
ãéžæããã«ã¯ããœãŒã¹ããŒã¿ãå¿
èŠã§ãã ããã§ããŠãŒã¶ãŒã®èšå®ãããããªãå Žåã¯ããŠãŒã¶ãŒãéžæããææ¡ã«åºã¥ããŠæšå¥šäºé
ãéžæã§ããŸãã ãã ããã·ã¹ãã ã¯çµ¶ããåŠç¿ãã顧客ã®å¥œã¿ã«é¢ããããŒã¿ãèç©ããå¿
èŠããããŸãã ååãªæ
å ±ãåéããããšãæ©æ¢°åŠç¿ã·ã¹ãã ã䜿çšããŠé¢é£ããæšå¥šäºé
ãåæããã³éžæã§ããããã«ãªããŸãã ããã«ãã·ã¹ãã ã¯ä»ã®ãŠãŒã¶ãŒã«é¢ããæ
å ±ãéä¿¡ããããæã
åãã¬ãŒãã³ã°ãããã§ããŸãã ãã®äŸã§ã¯ãæšå¥šã·ã¹ãã ã¯ãã§ã«æ©æ¢°åŠç¿ã¢ã«ãŽãªãºã ã䜿çšããã®ã«ååãªããŒã¿ãèç©ããŠããŸãã
ãã®ãããªã·ã¹ãã ã§ã®ããŒã¿åŠçã¯ãéåžžãåéãä¿ç®¡ãåæãæšå¥šäºé
ã®éžæã®4段éã§å®è¡ãããŸãïŒäžå³ãåç
§ïŒã
ãã®ãããªã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã¯ã次ã®ããã«æŠç¥çã«è¡šãããšãã§ããŸãã
åã¹ãããã¯ãç¹å®ã®èŠä»¶ã«åãããŠã«ã¹ã¿ãã€ãºã§ããŸãã ã·ã¹ãã ã¯æ¬¡ã®èŠçŽ ã§æ§æãããŠããŸãã
- ããã³ããšã³ã ãã¹ãŠã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ãèšé²ããããã€ãŸãããŒã¿ãåéãããã¹ã±ãŒã©ãã«ã€ã³ã¿ãŒãã§ã€ã¹ããŒãã
- ä¿ç®¡ æ©æ¢°åŠç¿ãã©ãããã©ãŒã ã§äœ¿çšå¯èœãªæ°žç¶ã¹ãã¬ãŒãžã ããŒã¿ã®èªã¿èŸŒã¿ã«ã¯ãããŒã¿ã®ã€ã³ããŒãããšã¯ã¹ããŒãã倿ãªã©ãããã€ãã®æé ãå«ãŸããŸãã
- æ©æ¢°åŠç¿ã åéãããããŒã¿ã®åæãšæšå¥šäºé
ã®éžæãå®è¡ãããæ©æ¢°åŠç¿ãã©ãããã©ãŒã ã
- 2çªç®ã®èŠçŽ ã¯ã¹ãã¬ãŒãžã§ãã ããã³ããšã³ãéšåããªã¢ã«ã¿ã€ã ãŸãã¯äºåŸçã«äœ¿çšããå¥ã®ãªããžããª-æšå¥šäºé
ãæäŸããå¿
èŠãããå Žåã«å¿ããŠã
ã³ã³ããŒãã³ãã®éžæ
é«éã§äŸ¿å©ãå®äŸ¡ã§æ£ç¢ºãªãœãªã¥ãŒã·ã§ã³ãåŸãããã«ã
Google App Engine ã
Google Cloud SQL ãããã³
Google Compute EngineããŒã¹ã®
Apache SparkãéžæãããŸããã æ§æã¯ãbdutilã¹ã¯ãªããã䜿çšããŠäœæãããŸããã
App EngineãµãŒãã¹ã䜿çšãããšã1ç§ãããäœäžãã®ãªã¯ãšã¹ããåŠçã§ããŸãã ããã«ã管çã容æã§ããµã€ãã®äœæããå
éšã¹ãã¬ãŒãžãžã®ããŒã¿ã®æžã蟌ã¿ãŸã§ãããããã¿ã¹ã¯ãå®è¡ããã³ãŒãããã°ããèšè¿°ããŠå®è¡ã§ããŸãã
Cloud SQLã¯ããœãªã¥ãŒã·ã§ã³ã®äœæãç°¡çŽ åããŸãã æå€§208 GBã®RAMãæèŒãã32ã³ã¢ã®ä»®æ³ãã·ã³ãå±éããGBãããæ¯ç§30ã®I / Oæäœãšæ°åã®åææ¥ç¶ã«ããããªã³ããã³ãã§æå€§10 TBã®ã¹ãã¬ãŒãžãå¢ããããšãã§ããŸãã ããã¯ãæ€èšäžã®ã·ã¹ãã ããã³ä»ã®å€ãã®å®éã®ã±ãŒã¹ã«ãšã£ãŠååãããã»ã©ã§ãã ããã«ãCloud SQLã¯Sparkããã®çŽæ¥ã¢ã¯ã»ã¹ããµããŒãããŠããŸãã
Sparkã¯ãåŸæ¥ã®Hadoopããã»ããµãšæ¯èŒããŠåªããŠããŸããå
·äœçãªãœãªã¥ãŒã·ã§ã³ã«ããããŸãããããã©ãŒãã³ã¹ã¯10ã100åé«ããªããŸãã
Spark MLlibã©ã€ãã©ãªã䜿çš
ãããšãæ°åã®è©äŸ¡ãæ°åã§åæããã¢ã«ãŽãªãºã ãããé »ç¹ã«å®è¡ããŠãæšå¥šäºé
ãææ°ã®ç¶æ
ã«ä¿ã€ããšãã§ããŸãã Sparkã¯ãããã·ã³ãã«ãªããã°ã©ãã³ã°ã¢ãã«ããã䟿å©ãªAPIãããã³ããæ±çšçãªèšèªãç¹åŸŽã§ãã èšç®ã®ããã«ããã®ãã¬ãŒã ã¯ãŒã¯ã¯RAMãæå€§éã«äœ¿çšããŠããã£ã¹ã¯ã¢ã¯ã»ã¹ã®åæ°ãæžãããŸãã ãŸããI / Oæäœã®æ°ãæå°éã«æããããŸãã åæã€ã³ãã©ã¹ãã©ã¯ãã£ããã¹ããããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãCompute Engineã䜿çšãããŸãã ããã«ããã䜿çšã®äºå®ã«å¿ããŠæ¯åæ¯æããè¡ããããããã³ã¹ãã倧å¹
ã«åæžã§ããŸãã
次ã®å³ã¯ãåãã·ã¹ãã ã¢ãŒããã¯ãã£ã瀺ããŠããŸãããçŸåšã¯äœ¿çšãããŠãããã¯ãããžãå«ãŸããŠããŸãã
ããŒã¿åé
æšå¥šã·ã¹ãã ã¯ãæé»çãªæ
å ±ïŒåäœïŒãŸãã¯æç€ºçãªæ
å ±ïŒè©äŸ¡ãšã¬ãã¥ãŒïŒã«åºã¥ããŠãŠãŒã¶ãŒããŒã¿ãåéã§ããŸãã
ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯ãŠãŒã¶ãŒã®ä»å
¥ãªãã«ãã°ã«èšé²ã§ãããããåäœããŒã¿ã®åéã¯éåžžã«ç°¡åã§ãã ãã®ã¢ãããŒãã®æ¬ ç¹ã¯ãåéãããããŒã¿ãåæããã®ãé£ãããªãããšã§ããããšãã°ãæãéèŠãªããŒã¿ãèå¥ããããšãã§ããŸãã ãã°ãšã³ããªã䜿çšããŠæç€ºçãªã¢ã¯ãã£ããã£ããŒã¿ãåæããäŸã¯ã
ããããå
¥æã§ã
ãŸã ã
è©äŸ¡ãšã¬ãã¥ãŒãåéããããšã¯ãå€ãã®ãŠãŒã¶ãŒãããããæ®ãããšã«æ¶æ¥µçã§ãããããããå°é£ã§ãã ãã ãã顧客ã®å¥œã¿ãçè§£ããã®ã«æã圹ç«ã€ã®ã¯ãã®ãããªããŒã¿ã§ãã
ããŒã¿ä¿å
ã¢ã«ãŽãªãºã ã§äœ¿çšã§ããããŒã¿ãå€ãã»ã©ãæšå¥šäºé
ã¯ããæ£ç¢ºã«ãªããŸãã ã€ãŸããããã«ããã°ããŒã¿ã®æäœãéå§ããå¿
èŠããããŸãã
䜿çšããã¹ãã¬ãŒãžã®ã¿ã€ãã®éžæã¯ãæšå¥šããŒã¿ãäœæããããŒã¿ã«åºã¥ããŠç°ãªããŸãã NoSQLããŒã¿ããŒã¹ãSQLããŸãã¯ãªããžã§ã¯ãã¹ãã¢ã§ãããŸããŸããã ããŒã¿ã®éãšçš®é¡ã«å ããŠãå®è£
ã®å®¹æããç°å¢ã«çµ±åããæ©èœãç§»è¡ã®ãµããŒããªã©ã®èŠå ãèæ
®ããå¿
èŠããããŸãã
ã¹ã±ãŒã©ãã«ãªç®¡çãããããŒã¿ããŒã¹ã¯ããŠãŒã¶ãŒã®è©äŸ¡ãšã¢ã¯ã·ã§ã³ãä¿åããã®ã«æé©ã§ããã䜿ãããããããå€ãã®æéãè²»ããããšãã§ããŸãã
Cloud SQLã¯ãããã®èŠä»¶ãæºããã ãã§ãªããSparkããããŒã¿ãç°¡åã«ããŠã³ããŒãã§ããããã«ããŸãã
次ã®ã³ãŒãäŸã¯ãCloud SQLããŒãã«ã¹ããŒãã瀺ããŠããŸãã è³è²žç©ä»¶ã¯ãå®¿æ³æœèšãããŒãã«ã«å
¥åããããã®ç©ä»¶ã®ãŠãŒã¶ãŒè©äŸ¡ã¯ãè©äŸ¡ãããŒãã«ã«å
¥åãããŸãã
CREATE TABLE Accommodation ( id varchar(255), title varchar(255), location varchar(255), price int, rooms int, rating float, type varchar(255), PRIMARY KEY (ID) ); CREATE TABLE Rating ( userId varchar(255), accoId varchar(255), rating int, PRIMARY KEY(accoId, userId), FOREIGN KEY (accoId) REFERENCES Accommodation(id) );
Sparkã¯ãHadoop HDFSãCloud Storageãªã©ã®ããŸããŸãªãœãŒã¹ããããŒã¿ãååŸã§ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãããŒã¿ã¯
JDBCã³ãã¯ã¿ãŒã䜿çšã
㊠Cloud SQLããçŽæ¥æœåºãã
ãŸã ã Sparkãžã§ãã¯äžŠè¡ããŠå®è¡ãããããããã®ã³ãã¯ã¿ãŒã¯ã¯ã©ã¹ã¿ãŒã®ãã¹ãŠã®ã€ã³ã¹ã¿ã³ã¹ã§äœ¿çšå¯èœã§ãªããã°ãªããŸããã
ããŒã¿åæ
åæãæåãããã«ã¯ãã¢ããªã±ãŒã·ã§ã³ã®èŠä»¶ãæç¢ºã«çå®ããå¿
èŠããããŸãã
- é©ææ§ ã ã¢ããªã¯ã©ããããæ©ãæšå¥šäºé
ãäœæããå¿
èŠããããŸããïŒ
- ããŒã¿ãã£ã«ã¿ãªã³ã° ã ã¢ããªã±ãŒã·ã§ã³ã¯ããŠãŒã¶ãŒã®å¥œã¿ãä»ã®ãŠãŒã¶ãŒã®æèŠããŸãã¯è£œåã®é¡äŒŒæ§ã®ã¿ã«åºã¥ããŠæšå¥šäºé
ãäœæããŸããïŒ
驿æ§
æåã«æ±ºå®ããããšã¯ããŠãŒã¶ãŒãã©ãã ãæ©ãæšå¥šäºé
ãåãåããã§ãã ããã«ããµã€ãã衚瀺ãããšãããŸãã¯åŸã§ãã¡ãŒã«ã§ïŒ æåã®ã±ãŒã¹ã§ã¯ããã¡ãããåæã¯ããå¹ççã§ãªããã°ãªããŸããã
- ãªã¢ã«ã¿ã€ã åæã«ã¯ãäœææã®ããŒã¿ã®åŠçãå«ãŸããŸãã ãã®ã¿ã€ãã®ã·ã¹ãã ã§ã¯ãååãšããŠãã€ãã³ããããŒãåŠçããã³åæã§ããããŒã«ã䜿çšãããŸãã ãã®å Žåã®æšå¥šäºé
ã¯ããã«äœæãããŸãã
- ãããåæã«ã¯ã宿çãªããŒã¿åŠçãå«ãŸããŸãã ãã®ã¢ãããŒãã¯ãå®éã®çµæãåŸãããã«ååãªããŒã¿ãåéããå¿
èŠãããå Žåãããšãã°1æ¥ãããã®è²©å£²éã調ã¹ãå Žåã«é©ããŠããŸãã ãã®å Žåã®æšå¥šäºé
ã¯äºåŸçã«éçºãããé»åã¡ãŒã«åœ¢åŒã§æäŸãããŸãã
- ã»ãŒãªã¢ã«ã¿ã€ã ã®åæã§ã¯ãæ°åãŸãã¯æ°ç§ããšã«åæããŒã¿ãæŽæ°ããŸãã ãã®ã¢ãããŒãã«ããã1ã€ã®ãŠãŒã¶ãŒã»ãã·ã§ã³å
ã§æšå¥šäºé
ãæäŸã§ããŸãã
ä»»æã®ã«ããŽãªã®é©ææ§ãéžæã§ããŸããããªã³ã©ã€ã³è²©å£²ã®å Žåããã©ãã£ãã¯ã®éãšåŠçãããããŒã¿ã®ã¿ã€ãã«å¿ããŠããããåæãšã»ãŒãªã¢ã«ã¿ã€ã ã®åæã®ã¯ãã¹ãæé©ã§ãã åæãã©ãããã©ãŒã ã¯ãããŒã¿ããŒã¹ãšçŽæ¥é£æºããããšããæ°žç¶ã¹ãã¬ãŒãžã«å®æçã«ä¿åããããã³ããšé£æºããããšãã§ããŸãã
ããŒã¿ãã£ã«ã¿ãªã³ã°
ãã£ã«ã¿ãªã³ã°ã¯ãæšå¥šã·ã¹ãã ã®éèŠãªã³ã³ããŒãã³ãã§ãã ãã£ã«ã¿ãªã³ã°ã®äž»ãªã¢ãããŒãã¯æ¬¡ã®ãšããã§ãã
- æšå¥šäºé
ã屿§ãã€ãŸããŠãŒã¶ãŒã衚瀺ãŸãã¯è©äŸ¡ããååãšã®é¡äŒŒæ§ã«ãã£ãŠéžæãããå Žåã®ã³ã³ãã³ãã
- ã¯ã©ã¹ã¿ãŒãäºãã«ããŸãçµã¿åããããååãéžæããããšãã ãã ããä»ã®ãŠãŒã¶ãŒã®æèŠãè¡åã¯èæ
®ãããŸããã
- 奜ã¿ã䌌ãŠãããŠãŒã¶ãŒã衚瀺ãŸãã¯éžæãã補åãéžæãããå Žåã®å
±åäœæ¥ã
Cloud Platformã¯3ã€ã®ã¿ã€ããã¹ãŠããµããŒãããŠããŸããããã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ãApache Sparkã«åºã¥ãå調ãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ãéžæãããŸããã ã³ã³ãã³ããšã¯ã©ã¹ã¿ãŒãã£ã«ã¿ãªã³ã°ã®è©³çްã«ã€ããŠã¯ã
ä»é²ãåç
§ããŠãã ããã
å調ãã£ã«ã¿ãªã³ã°ã«ããã補åã®å±æ§ããæœè±¡åãããŠãŒã¶ãŒã®å¥œã¿ãèæ
®ããäºæž¬ãè¡ãããšãã§ããŸãã ãã®ã¢ãããŒãã¯ãåã補åã奜ã2人ã®ãŠãŒã¶ãŒã®å奜ãåããŸãŸã§ãããšããåæã«åºã¥ããŠããŸãã
è©äŸ¡ãšã¢ã¯ã·ã§ã³ã«é¢ããããŒã¿ã¯ãããªãã¯ã¹ã®ã»ãããšããŠã補åãšãŠãŒã¶ãŒã¯æ°éãšããŠæç€ºã§ããŸãã ã·ã¹ãã ã¯ãããªãã¯ã¹å
ã®æ¬ èœã»ã«ãåãã補åã«å¯ŸãããŠãŒã¶ãŒã®æ
床ãäºæž¬ããããšããŸãã 以äžã¯ã1ã€ã®ãããªãã¯ã¹ã®2ã€ã®ãªãã·ã§ã³ã§ããæåã®ãªãã·ã§ã³ã¯ãæ¢åã®æšå®å€ã瀺ããŠããŸãã 2çªç®ã§ã¯ããããã¯åäžæ§ã§ç€ºãããæ¬ èœããè©äŸ¡ã¯ãŒãã§ç€ºãããŸãã ã€ãŸãã2çªç®ã®ãªãã·ã§ã³ã¯ççå€è¡šã§ããããŠãããã¯ãŠãŒã¶ãŒãšè£œåãšã®å¯Ÿè©±ã瀺ããŸãã

å調ãã£ã«ã¿ãªã³ã°ã§ã¯ãäž»ã«2ã€ã®æ¹æ³ã䜿çšãããŸãã
- anamnestic-ã·ã¹ãã ã¯è£œåãŸãã¯ãŠãŒã¶ãŒéã®äžèŽãèšç®ããŸãã
- ã¢ãã« -ã·ã¹ãã ã¯ããŠãŒã¶ãŒã補åãè©äŸ¡ããæ¹æ³ãšå®è¡ããã¢ã¯ã·ã§ã³ãèšè¿°ããã¢ãã«ã«åºã¥ããŠåäœããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒè©äŸ¡ã«åºã¥ãã¢ãã«ææ³ã䜿çšãããŸãã
ãã®ãœãªã¥ãŒã·ã§ã³ã«å¿
èŠãªãã¹ãŠã®åæããŒã«ã¯ãSparkã®Pythonããã°ã©ãã³ã°ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
PySparkã§å©çšã§ããŸãã ScalaãšJavaã¯è¿œå ã®æ©äŒãæäŸããŸãã
Sparkã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
ã¢ãã«ãã¬ãŒãã³ã°
Spark MLlibã¯ãALSïŒAlternating Least SquaresïŒã¢ã«ãŽãªãºã ã䜿çšããŠã¢ãã«ããã¬ãŒãã³ã°ããŸãã å€äœãšåæ£ã®æé©ãªæ¯çãå®çŸããã«ã¯ã次ã®ãã©ã¡ãŒã¿ãŒã®å€ã調æŽããå¿
èŠããããŸãã
- ã©ã³ã¯ -ãŠãŒã¶ãŒãè©äŸ¡ããéã«ã¬ã€ãããããç§ãã¡ã«ãšã£ãŠæªç¥ã®èŠå ã®æ°ã ç¹ã«ãããã«ã¯å¹Žéœ¢ãæ§å¥ãå Žæãå«ãŸããŸãã ããçšåºŠãã©ã³ã¯ãé«ãã»ã©ãæšå¥šã®ç²ŸåºŠã¯é«ããªããŸãã ãã®ãã©ã¡ãŒã¿ãŒã®æå°å€ã¯5ã§ãã æšå¥šã®å質ã®å·®ãæžå°ãå§ãããŸã§ïŒãŸãã¯ååãªã¡ã¢ãªãšããã»ããµã®é»åãåŸããããŸã§ïŒã5ãã€å¢åããŸãã
- ã©ã ãã¯ã åãã¬ãŒãã³ã°ãåé¿ããæ£ååãã©ã¡ãŒã¿ãŒã§ããã€ãŸãã倧ããªåæ£ãšå°ããªãã€ã¢ã¹ã®ããç¶æ³ã§ãã 忣ã¯ãç¹å®ã®ãã€ã³ãã®çè«çã«æ£ããå€ã«é¢ããŠïŒæ°åã®ãã¹ã®åŸïŒè¡ãããäºæž¬ã®ã°ãã€ãã§ãã ãªãã»ãã-çã®å€ããã®äºæž¬ã®è·é¢ã åãã¬ãŒãã³ã°ã¯ãã¢ãã«ãæ¢ç¥ã®ãã€ãºã¬ãã«ã®ãã¬ãŒãã³ã°ããŒã¿ã§é©åã«æ©èœããå Žåã«èгå¯ãããŸãããå®éã«ã¯äžååãªçµæã瀺ããŸãã ã©ã ãã倧ããã»ã©ãåãã¬ãŒãã³ã°ã¯å°ãªããªããŸããããã€ã¢ã¹ã¯é«ããªããŸãã ãã¹ãã«ã¯ã0.01ã1ãããã³10ã®å€ããå§ãããŸãã
ãã®å³ã¯ãããŸããŸãªåæ£ããã³å€äœæ¯ã瀺ããŠããŸãã ã¿ãŒã²ããã®äžå¿ã¯ãã¢ã«ãŽãªãºã ã䜿çšããŠäºæž¬ããå€ã§ãã

- å埩 -ãã¬ãŒãã³ã°ãã¹ã®æ°ã ãã®äŸã§ã¯ããã©ã³ã¯ããã©ã¡ãŒã¿ãŒãšãã©ã ãããã©ã¡ãŒã¿ãŒã®ããŸããŸãªçµã¿åããã«å¯ŸããŠã5ã10ãããã³20åã®å埩ãå®è¡ããå¿
èŠããããŸãã
以äžã¯ãSparkã§ALSãã¬ãŒãã³ã°ã¢ãã«ãå®è¡ãããµã³ãã«ã³ãŒãã§ãã
from pyspark.mllib.recommendation import ALS model = ALS.train(training, rank = 10, iterations = 5, lambda_=0.01)
ã¢ãã«éžæ
ALSã¢ã«ãŽãªãºã ã«åºã¥ãå調ãã£ã«ã¿ãªã³ã°ã§ã¯ã3ã€ã®ããŒã¿ã»ããã䜿çšãããŸãã
- ãã¬ãŒãã³ã°ã»ããã«ã¯ãæ¢ç¥ã®å€ãæã€ããŒã¿ãå«ãŸããŠããŸãã ãããçæ³çãªçµæã§ãã ãã®ãœãªã¥ãŒã·ã§ã³ã§ã¯ããã®ãµã³ãã«ã«ã¯ãŠãŒã¶ãŒè©äŸ¡ãå«ãŸããŠããŸãã
- ãã¹ãã»ããã«ã¯ããã©ã¡ãŒã¿ãŒã®æé©ãªçµã¿åãããååŸããæé©ãªã¢ãã«ãéžæããããã«ãã¬ãŒãã³ã°ã»ããã調æŽã§ããããŒã¿ãå«ãŸããŠããŸãã
- ãã¹ããµã³ãã«ã«ã¯ãæé©ãªã¢ãã«ã®åäœã確èªã§ããããŒã¿ãå«ãŸããŠããŸãã ããã¯ãå®éã®åæãšåçã§ãã
æé©ãªã¢ãã«ãéžæããã«ã¯ãèšç®ãããã¢ãã«ããã¹ããµã³ãã«ãããã³ãã®ãµã€ãºãåºç€ãšããŠãäºä¹å¹³åå¹³æ¹æ ¹èª€å·®ïŒRMSEïŒãèšç®ããå¿
èŠããããŸãã RMSEãå°ããã»ã©ãã¢ãã«ã®ç²ŸåºŠã¯é«ããªããŸãã
å§åã®çµè«
åæçµæã®åºåãé«éåããã«ã¯ãããããããŒã¿ããŒã¹ã«ããŒãããŠããªã³ããã³ãã§ã¯ãšãªãå®è¡ã§ããããã«ããå¿
èŠããããŸãã ããã«ã¯Cloud SQLãæé©ã§ãã Spark 1.4ã䜿çšãããšãPySparkããããŒã¿ããŒã¹ã«åæçµæãçŽæ¥æžã蟌ãããšãã§ããŸãã
æšå¥šè¡šã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
CREATE TABLE Recommendation ( userId varchar(255), accoId varchar(255), prediction float, PRIMARY KEY(userId, accoId), FOREIGN KEY (accoId) REFERENCES Accommodation(id) );
ã³ãŒãåââæ
次ã«ããã¬ãŒãã³ã°ã¢ãã«ã®ã³ãŒããæ€èšããŸãã
Cloud SQLããããŒã¿ãååŸãã
Spark SQLã³ã³ããã¹ãã䜿çšãããšãJDBCã³ãã¯ã¿ãä»ããŠCloud SQLã€ã³ã¹ã¿ã³ã¹ã«ç°¡åã«æ¥ç¶ã§ããŸãã ããŒã¿ã¯DataFrame圢åŒã§ããŒããããŸãã
jdbcDriver = 'com.mysql.jdbc.Driver' jdbcUrl = 'jdbc:mysql://%s:3306/%s?user=%s&password=%s' % (CLOUDSQL_INSTANCE_IP, CLOUDSQL_DB_NAME, CLOUDSQL_USER, CLOUDSQL_PWD) dfAccos = sqlContext.load(source='jdbc', driver=jdbcDriver, url=jdbcUrl, dbtable=TABLE_ITEMS) dfRates = sqlContext.load(source='jdbc', driver=jdbcDriver, url=jdbcUrl, dbtable=TABLE_RATINGS)
DataFrameãRDDã«å€æããããŒã¿ã»ãããäœæããŸã
Sparkã¯
RDDïŒResilient Distributed DatasetïŒã®æŠå¿µã«åºã¥ããŠããŸããããã¯ãèŠçŽ ã䞊è¡ããŠæäœã§ããæœè±¡åã§ãã RDDã¯ãæ°žç¶ã¹ãã¬ãŒãžã«åºã¥ãèªã¿åãå°çšã®ããŒã¿ã³ã¬ã¯ã·ã§ã³ã§ãã ãã®ãããªã³ã¬ã¯ã·ã§ã³ã¯ã¡ã¢ãªå
ã§åæã§ãããããå埩åŠçãå¯èœã§ãã
èŠããŠããããã«ãæé©ãªã¢ãã«ãéžæããã«ã¯ãããŒã¿ã»ããã3ã€ã®ãµã³ãã«ã«åå²ããå¿
èŠããããŸãã æ¬¡ã®ã³ãŒãã§ã¯ãéè€ããªãå€ãã©ã³ãã ã«60/20/20ã®å²åã§åé¢ããè£å©é¢æ°ã䜿çšããŠããŸãã
rddTraining, rddValidating, rddTesting = dfRates.rdd.randomSplit([6,2,2])
ãæ³šæ RatingããŒãã«ã®åã¯ãaccoIdãuserIdãratingã®é åºã§é
眮ããå¿
èŠããããŸãã ããã¯ãALSã¢ã«ãŽãªãºã ãç¹å®ã®è£œå/ãŠãŒã¶ãŒã®ãã¢ã«åºã¥ããŠäºæž¬ãè¡ããšããäºå®ã«ãããã®ã§ãã é åºãçã£ãŠããå Žåã¯ãRDDã®ãããæ©èœã䜿çšããŠããŒã¿ããŒã¹ã倿ŽããããåãäžŠã¹æ¿ããããšãã§ããŸãããã¬ãŒãã³ã°ã¢ãã«ã®ãã©ã¡ãŒã¿ãŒã®éžæ
ãã§ã«è¿°ã¹ãããã«ãALSã¡ãœããã§ã¯ãæé©ãªã¢ãã«ãæçµçã«ååŸã§ããããã«ãã©ã³ã¯ãæ£ååãããã³å埩ã調æŽããããšãã¿ã¹ã¯ã§ãã ã·ã¹ãã ã«ã¯ãã§ã«ãŠãŒã¶ãŒã®è©äŸ¡ãããããããã¬ã€ã³æ©èœã®çµæããã¹ãéžæãšæ¯èŒããå¿
èŠããããŸãã ãã¬ãŒãã³ã°ãµã³ãã«ããŠãŒã¶ãŒã®å¥œã¿ãèæ
®ã«å
¥ããŠããããšã確èªããå¿
èŠããããŸãã
for cRank, cRegul, cIter in itertools.product(ranks, reguls, iters): model = ALS.train(rddTraining, cRank, cIter, float(cRegul)) dist = howFarAreWe(model, rddValidating, nbValidating) if dist < finalDist: print("Best so far:%f" % dist) finalModel = model finalRank = cRank finalRegul = cRegul finalIter = cIter finalDist = dist
ãæ³šæ howFarAreWe颿°ã¯ãã¢ãã«ã䜿çšããŠã補å/ãŠãŒã¶ãŒã®ãã¢ã®ã¿ã«åºã¥ããŠãã¹ãã»ããã®æšå®å€ãäºæž¬ããŸãã def howFarAreWe(model, against, sizeAgainst): # Ignore the rating column againstNoRatings = against.map(lambda x: (int(x[0]), int(x[1])) ) # Keep the rating to compare against againstWiRatings = against.map(lambda x: ((int(x[0]),int(x[1])), int(x[2])) ) # Make a prediction and map it for later comparison # The map has to be ((user,product), rating) not ((product,user), rating) predictions = model.predictAll(againstNoRatings).map(lambda p: ( (p[0],p[1]), p[2]) ) # Returns the pairs (prediction, rating) predictionsAndRatings = predictions.join(againstWiRatings).values() # Returns the variance return sqrt(predictionsAndRatings.map(lambda s: (s[0] - s[1]) ** 2).reduce(add) / float(sizeAgainst))
ãŠãŒã¶ãŒã«ãšã£ãŠæãæ£ç¢ºãªäºæž¬ã®èšç®
æé©ãªã¢ãã«ãéžæãããšãåæ§ã®è¶£å³ãæã€ä»ã®ãŠãŒã¶ãŒã®å¥œã¿ã«åºã¥ããŠããŠãŒã¶ãŒãäœã«èå³ãæã€ããäºæž¬ããå¯èœæ§ãéåžžã«é«ããªããŸãã 以äžã¯ãåè¿°ã®ãããªãã¯ã¹å³ã§ãã
# Build our model with the best found values # Rating, Rank, Iteration, Regulation model = ALS.train(rddTraining, BEST_RANK, BEST_ITERATION, BEST_REGULATION) # Calculate all predictions predictions = model.predictAll(pairsPotential).map(lambda p: (str(p[0]), str(p[1]), float(p[2]))) # Take the top 5 ones topPredictions = predictions.takeOrdered(5, key=lambda x: -x[2]) print(topPredictions) schema = StructType([StructField("userId", StringType(), True), StructField("accoId", StringType(), True), StructField("prediction", FloatType(), True)]) dfToSave = sqlContext.createDataFrame(topPredictions, schema) dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')
æãæ£ç¢ºãªäºæž¬ãä¿åãã
ãã¹ãŠã®äºæž¬ã®ãªã¹ããåãåã£ãåŸãæåã®10åã®äºæž¬ãCloud SQLã«ä¿åããå¿
èŠããããŸããããã«ãããããšãã°ãµã€ãã«å
¥ããšãã«ã·ã¹ãã ããŠãŒã¶ãŒã«æšå¥šãçºè¡ãå§ããŸã
dfToSave = sqlContext.createDataFrame(topPredictions, schema) dfToSave.write.jdbc(url=jdbcUrl, table=TABLE_RECOMMENDATIONS, mode='overwrite')
ãœãªã¥ãŒã·ã§ã³ã®çºå£²
åã
ã®ãŠãŒã¶ãŒåãã®æšå¥šäºé
ãéçºããã³è¡šç€ºã§ãããœãªã¥ãŒã·ã§ã³ãèµ·åããããã®æ®µéçãªæé ã¯ã
GitHubã§å
¥æã§ã
ãŸã ã
SQLã¯ãšãªã³ãŒãã®æåŸã®ãã©ã°ã¡ã³ãã¯ãããŒã¿ããŒã¹ããæãé¢é£æ§ã®é«ãæšå¥šäºé
ãåãåããAnnaã®éå§ããŒãžã«è¡šç€ºããŸãã
Cloud Platformã³ã³ãœãŒã«ãŸãã¯MySQLã¯ã©ã€ã¢ã³ãã§ãã®ã¯ãšãªãå®è¡ããçµæã®äŸïŒ

ãã®ã¯ãšãªã®çµæããµã€ãã®ã¹ã¿ãŒãããŒãžã«è¿œå ããŠããŠãŒã¶ãŒã®é¢å¿ãé«ããã³ã³ããŒãžã§ã³ã¬ãã«ãé«ããããšãã§ããŸãã

ã¢ã³ãã«é¢ããå©çšå¯èœãªæ
å ±ãèšè¿°ãããã·ããªãªã«åºã¥ããŠãã·ã¹ãã ã¯ã¢ã³ãã«èå³ãããææ¡ãéžæããŸããã
ã¿ã¹ã¯ç£èŠ
bdutilæ§æã§ã®ç£èŠ
以åã«SSHçµç±ã§èŠªã€ã³ã¹ã¿ã³ã¹ã«æ¥ç¶ããŸããã Sparkã«ã¯ãWebã€ã³ã¿ãŒãã§ãŒã¹ãä»ããŠé²è¡äžã®ã¿ã¹ã¯ãç£èŠã§ãã管çã³ã³ãœãŒã«ããããŸãã
ããã©ã«ãã§ã¯ãããŒã8080ããã³ã³ãœãŒã«ã«ã¢ã¯ã»ã¹ã§ããŸããã€ã³ã¹ã¿ã³ã¹ããšã«ãã®ããŒããžã®ã¢ã¯ã»ã¹ãéãå¿
èŠããããŸãã ãã¡ã€ã¢ãŠã©ãŒã«ã«ãŒã«ã远å ããæé ã«ã€ããŠã¯ã
ãã¡ããã芧
ãã ãã ã ã³ã³ãœãŒã«ãéãã«ã¯ããã©ãŠã¶ã®ã¢ãã¬ã¹ããŒã«
ã€ã³ã¹ã¿ã³ã¹ã®å€éšIPã¢ãã¬ã¹ãå
¥åã
ãŸã ïŒããšãã°ã
1.2.3.4 ïŒ8080ïŒã äžã®ã¹ã¯ãªãŒã³ã·ã§ããã®Sparkã³ã³ãœãŒã«ã«ã¯ãäœæ¥ããŒããå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ãå®äºããã¢ããªã±ãŒã·ã§ã³ã«é¢ããæ
å ±ãå«ã3ã€ã®ã»ã¯ã·ã§ã³ããããŸãã
Sparkã³ã³ãœãŒã«Cloud Dataprocã§ã®ç£èŠ
åºåãšWebã€ã³ã¿ãŒãã§ãŒã¹ã®è©³çްã«ã€ããŠã¯ãCloud Dataprocã®ããã¥ã¡ã³ããåç
§ããŠãã ããã
ã¬ã€ã
ã»ããã¢ããæé ãšãµã³ãã«ãœãŒã¹ã³ãŒããå«ãå®å
šãªã¬ã€ãã¯
ãGitHubã§å
¥æã§ã
ãŸã ã
ã¢ããª
ã¯ãã¹ãã£ã«ã¿ãªã³ã°
äžèšã®äŸãããå調ãã£ã«ã¿ãªã³ã°ã«åºã¥ããŠæšå¥šäºé
ãéžæããããã®å¹æçã§ã¹ã±ãŒã©ãã«ãªãœãªã¥ãŒã·ã§ã³ãäœæããæ¹æ³ãåŠã³ãŸããã æšå¥šäºé
ãããã«æ£ç¢ºã«ããããã«ãä»ã®æ¹æ³ã䜿çšããŠçµæããã£ã«ã¿ãªã³ã°ã§ããŸãã ããã¯ãã³ã³ãã³ããã£ã«ã¿ãªã³ã°ãšã¯ã©ã¹ã¿ãŒãã£ã«ã¿ãªã³ã°ã®2ã€ã®äž»èŠãªãã£ã«ã¿ãªã³ã°ã¿ã€ãã«ãªããŸãã ãããã®ã¢ãããŒãã®çµã¿åããã«ããããŠãŒã¶ãŒã¯ããè¯ãæšå¥šäºé
ãæäŸã§ããŸãã
ã³ã³ãã³ããã£ã«ã¿ãªã³ã°
ãã®ã¿ã€ãã®ãã£ã«ã¿ãªã³ã°ã«ããã屿§ãšå°æ°ã®ãŠãŒã¶ãŒè©äŸ¡ãæã€ãªããžã§ã¯ãã®æšå¥šäºé
ãéžæã§ããŸãã ãªããžã§ã¯ãã®é¡äŒŒæ§ã¯ããã®å±æ§ã«åºã¥ããŠæ±ºå®ãããŸãã ãŠãŒã¶ãŒããŒã¹ã倧ããå Žåã§ããåŠçããã屿§ã®æ°ã¯èš±å®¹ã¬ãã«ã®ãŸãŸã§ãã
ã³ã³ãã³ããã£ã«ã¿ãªã³ã°ã远å ããã«ã¯ããã£ã¬ã¯ããªå
ã®ãªããžã§ã¯ãã«å¯ŸããŠä»ã®ãŠãŒã¶ãŒãèšå®ããæ¢åã®è©äŸ¡ã䜿çšã§ããŸãã ãããã®è©äŸ¡ã«åºã¥ããŠããŠãŒã¶ãŒã衚瀺ããŠãã補åã«æãè¿ã補åãéžæãããŸãã
ååãšããŠã2ã€ã®è£œåã®é¡äŒŒæ§ã決å®ããããã«ãOtiaiä¿æ°ãæåã«èšç®ãããæ¬¡ã«æãè¿ããã®ãæ€çŽ¢ãããŸãã
çµæã¯0ã1ã®ç¯å²ã®æ°å€ã«ãªããŸãã1ã«è¿ãã»ã©ãååã®é¡äŒŒæ§ã¯é«ããªããŸãã
次ã®ãããªãã¯ã¹ãæ€èšããŠãã ããã
P1ãšP2ã®é¡äŒŒæ§ã¯ã次ã®åŒã䜿çšããŠèšç®ãããŸãã
ã³ã³ãã³ããã£ã«ã¿ãªã³ã°ã·ã¹ãã ã¯ãããŸããŸãªããŒã«ã䜿çšããŠäœæã§ããŸãã 以äžã«2ã€ã®äŸã瀺ããŸãã
git clone https:
ãæ³šæ Mahoutã©ã€ãã©ãªã䜿çšããã«ã¯ãMavenãå¿
èŠã§ããã¯ã©ã¹ã¿ãªã³ã°
æ€çŽ¢ã³ã³ããã¹ããçè§£ãããŠãŒã¶ãŒã衚瀺ããŠãã補åãç¹å®ããããšãéèŠã§ãã ç°ãªãç¶æ³ã§ã¯ãåã人ãå®å
šã«ç°ãªã補åãæ¢ãããšãã§ããŸãããå¿
ãããèªåã§ã¯ãããŸããã ãã®ããããŠãŒã¶ãŒã衚瀺ããŠãã補åãšäŒŒãŠãã補åãç¥ãå¿
èŠããããŸãã k-meansã¯ã©ã¹ã¿ãªã³ã°ã䜿çšããå Žåãã·ã¹ãã ã¯ãäž»èŠãªå±æ§ã«åºã¥ããŠé¡äŒŒã®ãªããžã§ã¯ããã»ã°ã¡ã³ãã«çµåããŸãã
çŸåšããã³ãã³ã§å®¶ãæ¢ããŠãããŠãŒã¶ãŒã¯ããªãŒã¯ã©ã³ãã®äœå®
ã«èå³ãæã€å¯èœæ§ãäœãããããã®äŸã§ã¯ãã·ã¹ãã ã¯ãã®ãããªãªãã¡ãŒãé€å€ããå¿
èŠããããŸãã
from pyspark.mllib.clustering import KMeans, KMeansModel clusters = KMeans.train(parsedData, 2, maxIterations=10, runs=10, initializationMode="random")
çµæãæ¹åããã«ã¯ïŒ
æšå¥šäºé
ãããã«æ£ç¢ºã«ããããã«ãåæã§ã¯ã泚æã®å±¥æŽããµããŒãèŠæ±ã人å£çµ±èšæ
å ±ïŒå¹Žéœ¢ãå Žæãæ§å¥ãªã©ïŒãªã©ã®è¿œå èŠå ãèæ
®ããããšãã§ããŸãã å€ãã®å Žåããã®ããŒã¿ã¯é¡§å®¢é¢ä¿ç®¡çïŒCRMïŒãŸãã¯ããžãã¹ãªãœãŒã¹ãã©ã³ãã³ã°ïŒERPïŒã·ã¹ãã ã«æ¢ã«ä¿åãããŠããŸãã
ãŸããå€éšèŠå ããŠãŒã¶ãŒã®æ±ºå®ã«åœ±é¿ãäžããå¯èœæ§ãããããšã«æ³šæããå¿
èŠããããŸãã ã¬ã¯ãªãšãŒã·ã§ã³ã®å Žæãéžæãããšããå€ãã®é¡§å®¢ãç¹ã«å°ããªåäŸãæã€å®¶æã¯ãçæ
åŠçã«æž
æœãªå°åãæ¢ããŠããŸãã ãã®äŸã§ã¯ã
Breezometerãªã©ã®ãµãŒãããŒãã£APIãCloud PlatformããŒã¹ã®æšå¥šã·ã¹ãã ã«çµ±åãããšãç«¶äºäžã®åªäœæ§ãããã«åŸãããšãã§ããŸãã
Softline-Google Cloud PremierããŒãããŒSoftlineã¯ããã·ã¢ããã³CIS諞åœã§æå€§ã®äŒæ¥ãµãŒãã¹ãããã€ããŒã§ãããGoogleããã³Google Cloud PremierããŒãããŒã®ã¹ããŒã¿ã¹ãæã€å¯äžã®ããŒãããŒã§ãã å瀟ã¯é·å¹Žã«ãããããšã³ã¿ãŒãã©ã€ãºã»ã°ã¡ã³ãã®å¹Žéæåªç§ããŒãããŒãSMBã»ã°ã¡ã³ãã®EMEAå°åã®å¹Žéæåªç§ããŒãããŒãšããŠèªããããŸããã

|