èšäºã®èè
ïŒããã©ã»ãã¬ããã³ããã©ã»
ãã¬ããã³ ãããããªãŒã»ãã§ã¯ãã
dcheklovããã«ã¡ã¯ã
ããŒã¿ç®¡çãã©ãããã©ãŒã ïŒDMPïŒã¯ããªã³ã©ã€ã³åºåã®æŽå²å
šäœã§ç§ãã¡ã®ãæ°ã«å
¥ãã®ãããã¯ã§ãã
RTBã¯ãã¹ãŠããŒã¿ã«é¢ãããã®ã§ãã
Targetixãã¯ãããžãŒã¹ã¿ãã¯ïŒ
SSP ã
DSP ïŒã«ã€ããŠã®äžé£ã®ã¹ããŒãªãŒãç¶ããŠãä»æ¥ã¯å«ãŸããããŒã«ã®1ã€ã«ã€ããŠèª¬æããŸã
DMP-
ããŒã¯ãŒããã«ããŒãã€ã¯ãã»ã°ã¡ã³ããŒã·ã§ã³
ããŒã¯ãŒããã«ããŒã
䜿çšãããšãåºåäž»ã¯éåžžã«çããªãŒãã£ãšã³ã¹ã»ã°ã¡ã³ãïŒãã€ã¯ãã»ã°ã¡ã³ããšãåŒã°ããŸãïŒãäœæã§ããŸãã ãããããªãŒãã£ãšã³ã¹ãæ§ç¯ããããã«ã次ã®ã¡ã«ããºã ã䜿çšããããšã«ããŸãããåºåäž»ã¯ããŒã¯ãŒãã®ãªã¹ããèšå®ããæåŸã«ãæå®ãããããŒã¯ãŒãã§ããŒãžã«ã¢ã¯ã»ã¹ããããæ€çŽ¢ã§ãããã®åèªãæ€çŽ¢ãããŠãŒã¶ãŒã§æ§æããããªãŒãã£ãšã³ã¹ãåãåããŸãã äžæ¹ã§ã¯ãããã¯éåžžã«ã·ã³ãã«ãªããŒã«ã§ãããä»æ¹ã§ã¯ãããŒã±ãã£ã³ã°æ
åœè
ã«å®éšã®æ©äŒãæäŸããŸãã
ãã®ããŒã«ã®äž»ãªå©ç¹ã¯ããªãŒãã£ãšã³ã¹ã®äœæãå®å
šã«å¶åŸ¡ã§ããããšã§ãã åºåäž»ã¯ãæçµçã«ã©ã®ãŠãŒã¶ãŒãåºåãèŠãããæ確ã«ç解ããŠããŸãã ããšãã°ã次ã®ãããªããŒã¯ãŒãã®ãªã¹ãã«åºã¥ããŠãªãŒãã£ãšã³ã¹ãäœæã§ããŸãïŒford focusãopel astraãtoyota corolaã
åºåäž»ã®åŽããèŠãå ŽåïŒ
ãŸãããã®åé¡ã解決ããããã«ãèãããããã¹ãŠã®ããŒã¿ãããã€ããŒïŒçããŒã¿ãµãã©ã€ã€ãŒïŒãã
ã¯ãªãã¯ã¹ããªãŒã ïŒããŒãžãžã®ãŠãŒã¶ãŒ
ã¢ã¯ã»ã¹ã®å±¥æŽïŒãååŸããŸãã ããŒã¿ã¯æ¬¡ã®åœ¢åŒã§æäŸãããŸãã
{ user_id; url }
ç®æšãšèŠä»¶
ç§ãã¡ã楜åšã«æ±ããäž»ãªèŠä»¶ã¯ãèŽè¡ãäœæããé床ã§ããã ãã®ããã»ã¹ã¯ãæãé »åºŠã®é«ãåèªã§ã5å以äžãããããšã¯ãããŸããã ããŒã¯ãŒããæå®ããéã«ãã€ã³ã¿ãŒãã§ãŒã¹ã®åºåäž»ããªãŒãã£ãšã³ã¹ã®ãµã€ãºãæšå®ã§ããããšãéèŠã§ãã ãµã€ãºã®æšå®ã¯ãåèªãå
¥åãããšãã«ãªã¢ã«ã¿ã€ã ã§å®è¡ããå¿
èŠããããŸãïŒäžã®ãããªã§èŠãããããã«ã100ããªç§ä»¥å
ïŒã
ç解ãæ·±ããããã«ãããŒã«ã®èŠä»¶ã®å®å
šãªãªã¹ãã以äžã«ç€ºããŸãã
- ããŒã¿ã®å±ææ§ã®åå;
- ããŒã¿ããŒã¹ã®é«å¯çšæ§ïŒé«å¯çšæ§ïŒ;
- æ°Žå¹³æ¹åã®ã¹ã±ãŒã©ããªãã£ã
- æžã蟌ã¿é床ãéãã
- é«éå
šææ€çŽ¢;
- é«éããŒæ€çŽ¢ã
確ãã«ããã®ããŒã«ã®æåã®ããŒãžã§ã³ãäœæããåŸã«ãããã®èŠä»¶ã«éããŸãã:)
ããã£ãŠã¯ãããªãããšããæããæåã®ã¢ãŒããã¯ãã£
æåã¯ã
MongoDBã䜿çšããŸãããããã¹ãŠããŸããããŸããã
蚪åè
ã®å±¥æŽã³ã¬ã¯ã·ã§ã³ã¯ããŠãŒã¶ãŒã«ã€ããŠãããŒãž
ã€ã³ããã¯ã¹ã« -
ããŒãžã«ã€ããŠæžãããŠããŸãã ããŒãžURLèªäœã¯éèŠã§ã¯ãããŸãããããŒãžãããŠã³ããŒãããŠããŒã¯ãŒããæœåºããå¿
èŠããããŸãã ãã®åŸãæåã®åé¡ãçºçããŸããã å®éãæåã¯
ããŒãžã³ã³ãã€ã«ãããã³ã¬ã¯ã·ã§ã³ã¯ãªããããŒã¯ãŒãã¯
ããŒãžã€ã³ããã¯ã¹ã«èšé²ãããŠããŸãããããµãã©ã€ã€ãŒããã®ããŒã¯ãŒããšããŒã¿ã®åæèšé²ã«ããããã®ã³ã¬ã¯ã·ã§ã³ã«éåžžã«é«ãè² è·ãããã£ãŠããŸããã éåžžã
Keywordsãã£ãŒã«ãã¯å€§ãããã€ã³ããã¯ã¹ãå¿
èŠã§ããããã®æç¹ã®MongoDBïŒããŒãžã§ã³2.6ïŒã§ã¯ãæžã蟌ã¿æäœäžã«ã³ã¬ã¯ã·ã§ã³å
šäœãããã¯ãããŠããŸããã äžè¬çã«ãããŒã¯ãŒããå¥ã®
ããŒãžã³ã³ãã€ã«æžã¿ã³ã¬ã¯ã·ã§ã³ã«é
眮ããå¿
èŠããããŸããã ç§ãããªããã°ãªããªãã£ã-ã ããäœããåé¡ã解決ããã-ç§ãã¡ã¯å¬ããã§ãã ä»ã§ã¯ãµãŒããŒã®æ°ãšç¹æ§ãæãåºãã®ã¯å°é£ã§ã...çŽ50åã®ã·ã£ãŒãã
ããŒã¯ãŒãã§ãªãŒãã£ãšã³ã¹ãäœæããããã«ã
Page Compiledã³ã¬ã¯ã·ã§ã³ã«ãªã¯ãšã¹ããè¡ãããããã®åèªãèŠã€ãã£ãURLã®ãªã¹ããåãåããŸããããã®ãªã¹ãã§
Visitor Historyã³ã¬ã¯ã·ã§ã³ã«ã¢ã¯ã»ã¹ãããããã®ããŒãžã«ã¢ã¯ã»ã¹ãããŠãŒã¶ãŒãæ¢ããŸããã ãã¹ãŠãããŸãæ©èœãïŒç®èïŒããã¡ããäœãèœã¡ãªãéãã1æ¥ã«5ããŸãã¯10ïŒ!!!ïŒã®ãªãŒãã£ãšã³ã¹ã»ã°ã¡ã³ããäœæã§ããŸããã åœæã®è² è·ã¯1æ¥ãããçŽ8åããŒã¿ãã€ã³ããTTLã€ã³ããã¯ã¹-2é±éïŒ800 * 14 ...倧éã®ããŒã¿ããããŸããã äœæ¥ãè°è«ããã3ãæã§è² è·ã2åã«ãªããŸããã ãããããã®å¥åŠãªèšèšã®å¯¿åœããµããŒãããããã«ãããã«Nå°ã®ãµãŒããŒã䜿çšããããšã¯ã決ããŠé¢çœããªãã
ãã®ã¢ãŒããã¯ãã£ã®æ倧ãã€æãæãããªæ¬ ç¹ã¯ãURLã®ãªã¹ãã®ååŸã«é¢é£ããäžèšã®ãªã¯ãšã¹ãã§ãã ãã®ã¯ãšãªã®çµæã¯ãæ°åãæ°çŸäžã®ã¬ã³ãŒãã«ãªãå¯èœæ§ããããŸãã ãããŠãæãéèŠãªããšã¯ããã®ãªã¹ãã§å¥ã®ã³ã¬ã¯ã·ã§ã³ã«ãªã¯ãšã¹ããè¡ãå¿
èŠããã£ãããšã§ãã
ã¢ãŒããã¯ãã£ã®ä»ã®æ¬ ç¹ïŒ
- ã°ããŒãã«ããã¯ã«ããäžäŸ¿ãªèšé²ã
- ã€ã³ããã¯ã¹ã®å·šå€§ãªãµã€ãºãããã¯ããŒã¿ã®åé€ã«ããããããæé·ããŠããŸããã
- 倧èŠæš¡ã¯ã©ã¹ã¿ãŒã®ç£èŠã®è€éãã
- å
šææ€çŽ¢ã®ç°¡æããŒãžã§ã³ãç¬ç«ããŠäœæããå¿
èŠæ§ã
- ããŒã¿åŠçã«ãããå±ææ§ã®ååã®æ¬ åŠ;
- èŽè¡ã®èŠæš¡ãè¿
éã«è©äŸ¡ã§ããªãã
- ãŠãŒã¶ãŒããã®å Žã§èŠèŽè
ã«è¿œå ã§ããªãããšã
é·æïŒ
- ãã¹ãŠã®çæãç解ããŸããã
äœã«æ¥ãã®
äžè¬ã«ãæåããäœããããŸããããªãã£ãããšãæããã§ããããä»ã§ã¯æããã«ãªã£ãŠããŸãã ãªã¢ã«ã¿ã€ã ã§æŽæ°ããã次ã®åœ¢åŒã®ã¬ã³ãŒããå«ãããŒãã«ãå¿
èŠã§ãããšããçµè«ã«éããŸããã
user { user_id; keywords[] }
èãããããœãªã¥ãŒã·ã§ã³ãåæããåŸã1ã€ã®ããŒã¿ããŒã¹ã§ã¯ãªããããŒã¿ã®å°ããªè€è£œãšã®çµã¿åãããéžæããŸããã ããŒã¿ãè€è£œããã³ã¹ããããã®ã¢ãŒããã¯ãã£ãç§ãã¡ã«äžããæ©äŒãšæ¯èŒã§ããªãããããããè¡ããŸããã
æåã®ãœãªã¥ãŒã·ã§ã³ã¯ã
Solrå
šææ€çŽ¢ãã©ãããã©ãŒã ã§ãã ããã¥ã¡ã³ãã®åæ£ã€ã³ããã¯ã¹ãäœæã§ããŸãã Solrã¯ãå€ãã®ããã¥ã¡ã³ããããã
Clouderaã§ãµããŒããããŠããäžè¬çãªãœãªã¥ãŒã·ã§ã³ã§ãã ãã ããæ¬æ ŒçãªããŒã¿ããŒã¹ãšããŠã®äœæ¥ã¯æ©èœããªãã£ããããåæ£
HBaseåããŒã¿ããŒã¹ãã¢ãŒããã¯ãã£ã«è¿œå ããããšã«ããŸããã
æåã¯ãSolrã§ã¯
ãŠãŒã¶ãŒãããã¥ã¡ã³ããšããŠæ©èœãããã¹ãŠã®ããŒã¯ãŒããå«ãã€ã³ããã¯ã¹ãã£ãŒã«ã
ããŒã¯ãŒããååšããããšã決å®ãããŸããã ãã ããããŒãã«ããå€ãããŒã¿ãåé€ããäºå®ã ã£ãããã
ãŠãŒã¶ãŒ+æ¥ä»ã®æãããã¥ã¡ã³ããšããŠäœ¿çšããããšã«ããŸãããããã
User_idãã£ãŒã«ãã«ãªããŸãããã€ãŸããåããã¥ã¡ã³ãã«ã¯ãã®æ¥ã®ãã¹ãŠã®ãŠãŒã¶ãŒã®ããŒã¯ãŒããæ ŒçŽãããŸãã ãã®ã¢ãããŒãã«ãããTTLã€ã³ããã¯ã¹ã«ãã£ãŠå€ããšã³ããªãåé€ããããããŸããŸãªãæ°é®®ããã®ãªãŒãã£ãšã³ã¹ãæ§ç¯ãããã§ããŸãã
Real_Idãã£ãŒã«ãã¯å®éã®ãŠãŒã¶ãŒIDã§ãã ãã®ãã£ãŒã«ãã¯ãæå®ããã察象æéãæã€ãªã¯ãšã¹ãã®éçŽã«äœ¿çšãããŸãã
ã¡ãªã¿ã«ã
Solrã«äœåãªããŒã¿ãä¿åããªãããã«ããããã«ã
ããŒã¯ãŒããã£ãŒã«ãã«ã¯ã€ã³ããã¯ã¹ãä»ããããŠããã ãã§ãã£ããããä¿åãããæ
å ±éã倧å¹
ã«æžããããšãã§ããŸããã ãã®å Žåããã§ã«ç解ããŠããããã«ãããŒã¯ãŒãèªäœã¯
HBaseããååŸã§ããŸãã
ãã®ã¢ãŒããã¯ãã£ã§ç§ãã¡ã«ãšã£ãŠæçšã ã£ãSolrã®æ©èœïŒ
- é«éã€ã³ããã¯ã¹ä»ã;
- ã³ã³ãã¯ãã€ã³ããã¯ã¹;
- å
šææ€çŽ¢;
- èŠæ±ã«äžèŽããããã¥ã¡ã³ãã®æ°ã®æšå®ã
- ããŒã¿åé€åŸã®ã€ã³ããã¯ã¹ã®æé©åïŒä»ã®ããŒã¿ããŒã¹ã§ããããããã«ããã®æé·ãé²ããŸãïŒã
HBaseããã³Solrã§è€è£œãããã¢ããªã±ãŒã·ã§ã³ã¯ãHBaseã§ã®ã¿ã¢ããªã±ãŒã·ã§ã³ã«æžã蟌ãŸããŸããClouderaãµãŒãã¹ã¯ãæå®ããããã£ãŒã«ãå±æ§ãšTTLã€ã³ããã¯ã¹ã䜿çšããŠSolrã®ã¬ã³ãŒããèªåçã«è€è£œããŸãã
ãããã£ãŠã倧éã®ãªã¯ãšã¹ãã«é¢é£ããã³ã¹ããåæžããããšãã§ããŸããã ãããããããã¯ç§ãã¡ã«ãšã£ãŠå¿
èŠã§ããããšãå€æããç§ãã¡ã®åºç€ãšãªã£ããã¹ãŠã®èŠçŽ ã§ã¯ãããŸããã ãŸãããªã³ã¶ãã©ã€ã§å€§éã®ããŒã¿ãåŠçããå¿
èŠããããŸããããããã§ã¯ã
Apache Sparkãšãã®
ã¹ããªãŒãã³ã°æ©èœã圹ç«ã¡ãŸããã ãŸããããŒã¿ãã¥ãŒãšããŠããã®åœ¹å²ã«æé©ãª
Apache KafkaãéžæããŸããã
çŸåšãäœæ¥å³ã¯æ¬¡ã®ãšããã§ãã
1. Kafkaããã2ã€ã®ããã»ã¹ãããŒã¿ãéžæããŸãã ãã¥ãŒã®æ©èœã«ããããããããç¬èªã®ã«ãŒãœã«ãæã€è€æ°ã®ç¬ç«ããããã»ã¹ã«èªã¿èŸŒãããšãã§ããŸãã
2. PageIndexer-ãšã³ããªãã{user_idïŒ[urls]}ã¯URLã®ã¿ã䜿çšããŸãã
Page CompiledããŒãã«ã§ã®ã¿æ©èœããŸãã
- ããŒã¿ãã€ã³ããå°çãããšãããŒãžãæ¢ã«ããŠã³ããŒããããŠãããã©ããã確èªããããã«HBaseã«ãªã¯ãšã¹ããè¡ããŸã
- ããŒãžãããŒã¿ããŒã¹ã§èŠã€ãããªãã£ãå ŽåãããããããŒã¯ãŒããæœåºããŸã
- HBaseã«ããŒã¿ãæžã蟌ã¿ãŸãã
3. VisitorActionReceiver â kafkaã«ä¿åãããŠãããŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«é¢ããæ
å ±ã30ç§ïŒãããééïŒã§åéããŸãã
- ãã¥ãŒããéè€ãåé€ãã
- {user_idïŒ[urls]}ã®ãããªãšã³ããªãäœæãã
- HBaseã§ããŒãžã³ã³ãã€ã«ããŒãã«ã«ã¯ãšãªãå®è¡ããŠããŒã¯ãŒããååŸãã{user_idïŒ[keywords]}ã®ãããªãšã³ããªãäœæããŸã
- ãŠãŒã¶ãŒããŒã¯ãŒãããŒãã«ã®HBaseã§ã¯ãšãªãå®è¡ãããŠãŒã¶ãŒãæ¢ã«æã£ãŠããããŒã¯ãŒããååŸããŸã
- ãŠãŒã¶ãŒã®ããŒã¯ãŒãã®çµ±å
- Solrããã³HBaseã§ã®èšé²
4. SegmentBuilderã¯ãªãŒãã£ãšã³ã¹ãæ§ç¯ããæ¢åã®ãŠãŒã¶ãŒã«ãªã¢ã«ã¿ã€ã ã§æ°ãããŠãŒã¶ãŒãè¿œå ããŸãã
- ã¿ã€ããŒã§ãæªåŠçã®èŠèŽè
ã®ååšã確èªããŸãã
- Solrã§ãªã¯ãšã¹ããäœæãã察象ãŠãŒã¶ãŒã®ãŠãŒã¶ãŒãåãåããŸãã
- Aerospikeã«ããŒã¿ãæžã蟌ã¿ãŸã
PageIndexerã®æ©èœã¯ãããŸããŸãªçš®é¡ã®ããŒãžïŒããŸããŸãªåèªã®ã»ããïŒã«å¯ŸããŠãããŒãžããããŒã¯ãŒããéžæããããšã§ãã
1ã2å°ã®ãµãŒããŒ32GB RAM Xeon E5-2620ã§åäœãã1åããã15ã30KããŒãžãããŠã³ããŒãããŸãã åæã«ã200-400Kã¬ã³ãŒãããã¥ãŒããéžæããŸãã
ãŸãã
VisitorActionReceiverã®äž»ãªå©ç¹ã¯ãSolr / HBaseã«ã¬ã³ãŒããè¿œå ããããšã«å ããŠãããŒã¿ãã»ã°ã¡ã³ããã«ããŒã«ãéä¿¡ãããæ°ãããŠãŒã¶ãŒããªã¢ã«ã¿ã€ã ã§ãªãŒãã£ãšã³ã¹ã«è¿œå ãããããšã§ãã
VisitorActionReceiverã®åŒã³åºãé åºïŒ public static void main(String[] args) { SparkConf conf = getSparkConf(); JavaStreamingContext jssc = new JavaStreamingContext(conf, new Duration(STREAMING_BATCH_SIZE)); JavaPairInputDStream<String, byte[]> rawStream = Utils.createDirectStream(jssc, KAFKA_TOPIC_NAME, KAFKA_BROKERS); JavaPairDStream<String, String> pairUrlVid = rawStream.mapPartitionsToPair(rawMessageIterator -> convertRawMessage(rawMessageIterator)); Utils.GetCountInStreamRDD(pairUrlVid, "before_distinct"); JavaPairDStream<String,String> reducedUrlVid = pairUrlVid.reduceByKey((old_s, next_s) -> reduceByUrl(old_s, next_s), LEVEL_PARALLELISM).repartition(LEVEL_PARALLELISM).persist(StorageLevel.MEMORY_ONLY_SER()); Utils.GetCountInStreamRDD(reducedUrlVid, "after_distinct"); JavaDStream<SolrInputDocument> solrDocumentsStream = reducedUrlVid.mapPartitions(reducedMessages -> getKeywordsFromHbase(reducedMessages)).repartition(SOLR_SHARD_COUNT).persist(StorageLevel.MEMORY_ONLY_SER()); Utils.GetCountInStreamRDD(solrDocumentsStream, "hbase"); SolrSupport.indexDStreamOfDocs(SOLR_ZK_CONNECT, SOLR_COLLECTION_NAME, SOLR_BATCH_SIZE, solrDocumentsStream); jssc.start(); jssc.awaitTermination(); }
ã»ã°ã¡ã³ããã«ããŒã¯ãSolrã§è€éãªã¯ãšãªãçæããŸããSolrã§ã¯ãç°ãªãã¿ã°ã®åèªã«ç°ãªãéã¿ãå²ãåœãŠããããŠãŒã¶ãŒã®é¢å¿ã®æéïŒçæãäžæãé·æïŒãèæ
®ãããŸãã ãªãŒãã£ãšã³ã¹ãæ§ç¯ããããã®ãã¹ãŠã®ãªã¯ãšã¹ãã¯ãedismaxã¯ãšãªã䜿çšããŠè¡ãããŸããedismaxã¯ãšãªã¯ããªã¯ãšã¹ãã«å¯Ÿããåããã¥ã¡ã³ãã®éã¿ãè¿ããŸãã ãã®æ¹æ³ã§ãæ¬åœã«é¢é£æ§ã®é«ããŠãŒã¶ãŒãèŠèŽè
ã«ãªããŸãã
1ç§ãããçŽ20Kã®èªã¿åãèŠæ±ãš2.5Kã®æžã蟌ã¿èŠæ±ã
HBaseã«å±ããŸãã ã¹ãã¬ãŒãžå®¹éã¯æ倧100 GBã§ãã
Solrã¯
æ倧 250 GBãå æãã7æ¥éã®æ倧2å5,000äžä»¶ã®TTLã€ã³ããã¯ã¹ãå«ãŸããŠããŸãã ïŒè€è£œãé€ããã¹ãŠã®æ°å€ïŒã
ã€ã³ãã©ã¹ãã©ã¯ãã£ã®äž»ãªèŠçŽ ãç°¡åã«æãåºããŠãã ããã
Kafkaã¯ã¹ããŒãã§å®å®ãããã¥ãŒã§ããã
HBaseã¯é«éãªåããŒã¿ããŒã¹ã§ããã
Solrã¯é·ãéå®çžŸã®ããæ€çŽ¢ãšã³ãžã³ã§ããã
Sparkã¯ã¹ããªãŒãã³ã°ãå«ãåæ£ã³ã³ãã¥ãŒãã£ã³ã°ã§ãããæãéèŠãªããšã¯ããã¹ãŠã
HDFSäžã«ãã ãå®å
šã«ã¹ã±ãŒãªã³ã°ãããç£èŠãããéåžžã«å®å®ããŠããããšã§ãã ClouderaãæèŒã
æç¶å¯èœæ§ã®æããã€ã©ã¹ã ãããã«
ããŸããŸãªããŒã«ã䜿çšããŠã¯ãŒã¯ãããŒãè€éã«ããŠããããã«æããããããããŸããã å®éãç§ãã¡ã¯æ倧ã®ç°¡çŽ åã®éãæ©ãã§ããŸããã ã¯ãã1ã€ã®monguããµãŒãã¹ã®ãªã¹ãã«å€æŽããŸãããããããã¯ãã¹ãŠãäœæããããããã§æ©èœããŸãã
çŸåšãããŒã¯ãŒããã«ããŒã¯ãåºåäž»ãšåžžèã®ãã¹ãŠã®èŠä»¶ãæ¬åœã«æºãããŠããŸãã 250äžäººã®èŠèŽè
ã1ã7åã§äœæãããŸãã ãªãŒãã£ãšã³ã¹ãµã€ãºã®æšå®ã¯ãªã¢ã«ã¿ã€ã ã§è¡ãããŸãã 8å°ã®ãµãŒããŒã®ã¿ãé¢ä¿ããŠããŸãïŒi7-4770ã32GB RAMïŒã ãµãŒããŒãè¿œå ãããšãããã©ãŒãã³ã¹ãçŽç·çã«åäžããŸãã
ãŸã
ããã€ããªãããªã¿ãŒã²ãã£ã³ã°ãã©ãããã©ãŒã ã§äœæãã
ãããŒã«ããã€ã§ãè©Šãããšãã§ã
ãŸã ã
ãŠãŒã¶ãŒ
dcheklovã«æè¬ããŸããèšäºãäœæããæ¬åœã®éãæããŠãããŸãã=ïŒã
DMPãããã¯ã¯éå§ãããŠãããå
¬éããããŸãŸã§ããä»åŸã®ãªãªãŒã¹ã§ãåŸ
ã¡ãã ããã