> SELECT avg(amount) FROM transfer;
65.125965782378
generated in 3850 seconds
ããã§ãã€ã³ãã£ã±ãŒã¿ãæãæ°ãããããŒãã«ã®ãšã³ããªãæ¯ç§äœæããã1ãæã«äœçŸäžãã®ããŒã¿ãèç©ããããšæ³åããŠã¿ãŸãããã ãŸãã¯ä»ã®èŠä»¶ã§ãããæ¬è³ªã¯åãã§ã-æ¯ååãããŒã¿ãéçŽããããšã¯éåžžã«é«äŸ¡ã§ãã éåžžã®ããŒã¿ããŒã¹ã§ã¯ããã®ãããªæé©åã¯æäŸãããŠããŸããã ã«ãªãæ¹æ³
èªè»¢è»ã«ä¹ã人ã¯ããã®ãµã€ã¯ãªã³ã°ã³ã³ãã¥ãŒã¿ãã©ã®ããã«ããŠå¹³åé床ãç¡éã«æ¯ç§èšç®ã§ããã®ãçåã«æããããããŸãããããã¹ãŠã®é床å€ãä¿åããããã§ã¯ãããŸããã ä»ããã¡ãããmicroSDã«ãŒãã¯èªè»¢è»ã®ã³ã³ãã¥ãŒã¿ãŒã«å ¥ããŸããããã®ãããªã¡ã¢ãªãŒããªãã£ãæ°å¹Žåãšåãããã«åããŸããã
ç°¡åã§ãã移åè·é¢ãšæéãä¿åããŸãã æ¯ç§ãã¿ã€ã ã«ãŠã³ã¿ãŒãå¢ãããèµ°è¡è·é¢ãèµ°è¡è·é¢ã«è¿œå ããã ãã§ãã 4ãŸãã¯8ãã€ãã®2ã€ã®å€ã®ã¿ãåèš2ã€ã®å ç®æäœã å¹³åå€ãå°ãåºãã«ã¯ã1ã€ãå¥ã®å€ã«åå²ããå¿ èŠããããŸãã
ãã®ä»ã®å€æ
æ¯æãã·ã¹ãã ã®å Žåãå®æçã«éé¡ãŸãã¯å¹³åã®å€ãè¿œå ããã ãã§ãªãåé€ããå¿ èŠããããŸãã åé€ããå€ãããã£ãŠããå Žåãããã¯åãåŒã§å察æ¹åã«ã®ã¿è¡ãããŸãã
d 1ãããããªãå Žåãäœãå®è¡ãããŸããã
ãã§ã«èæ ®ãããŠããå€ãå€æŽããå Žåãåãããšã2åè¡ããŸããå¹³åããå€ãå€ãåé€ããæ°ããå€ãè¿œå ããŸãã
æ°åŠãç¥ã£ãŠãã人ã¯ãåæ£ãç©ãããã«ã¯åæ°éã®ç©ïŒãŸãã¯å ±åæ£ïŒãªã©ã®çµ±èšã«ç°¡åã«å解ã§ããŸãã ãã®ãããªç¥èãå®éã«é©çšããå Žæã¯äžäŸã§ãã
ãããã£ãŒã«
ãŠãŒã¶ãŒã¯ããŸããŸãªè³ªåããã¢ã³ã±ãŒãã«èšå ¥ãã1ã100ã®ã¹ã±ãŒã«ã§åæã瀺ããŸãïŒåŒ·ãåæããå®å šãªäžäžèŽãŸã§ïŒã 2人ã®ãŠãŒã¶ãŒéã®å·®ãã€ãŸã察å¿ãã質åã«å¯Ÿããåçéã®æšæºåå·®ãèšç®ããå¿ èŠããããŸããã
iãšjã¯ç°ãªããŠãŒã¶ãŒã§ãã ãŸãããŠãŒã¶ãŒXãšã°ã«ãŒããããã³ãŠãŒã¶ãŒXãšä»ã®ãã¹ãŠã®ãŠãŒã¶ãŒãšã®å·®ãèšç®ããå¿ èŠããããŸãã ïŒçµ±èšã®çšèªããæå³çã«éžè±ããåæ£ã®nã«ããé€ç®ãçç¥ããŸãããèšç®ã®æ¬è³ªãšè€éãã¯ãããããå®æ§çã«å€ãããŸããã§ãããïŒ
æé©åãªãã®ããŒã¿ããŒã¹ãžã®ã¯ãšãªã¯æ¬¡ã®ãšããã§ãã
éžæ å¹³åïŒãã¯ãŒïŒmy_answer.value-his_answer.valueã2ïŒïŒ ãã my_answer ASãšããŠåç my_answer.question_id = his_answer.question_idã§his_answer ONãšããŠINNER JOINåç ã©ã my_answer.user_id = X AND his_answer.user_id = Y
è€æ°ã®ãŠãŒã¶ãŒã®å Žåãæ¡ä»¶ãå€æŽããã ãã§ãã
... ã©ã his_answer.user_id INïŒZïŒAND ...
åçãå šå¡ãšæ¯èŒããå Žåã¯ãåé€ããããšãã§ããŸãã æããã«ããã®ããã«ã¯ãããŒãã«å šäœãéžæããå¿ èŠããããŸãã ãã¡ããã50åã®è³ªåãš10,000åã®ã¢ã³ã±ãŒããã€ãŸã500,000è¡ããããæ°ã¡ã¬ãã€ãã®ã¡ã¢ãªã§ãã£ãã·ã¥ã§ããŸãã ãã ãããŠãŒã¶ãŒã¯ã¢ã³ã±ãŒãã«èšå ¥ããçµæãèŠãããšãå€ããããèšç®æäœãããäžåºŠç¹°ãè¿ããããªããããæé©åããå¿ èŠããããŸãã
æåã®è¡ã®ãã®åŒã«ã¯ãåæ£åŒãããæ£ç¢ºã«ã¯æé©åãå¿ èŠãªéšåããããŸãã X qã¯è³ªåqã«å¯Ÿãããã®ãŠãŒã¶ãŒïŒã€ã³ãžã±ãŒã¿ãŒãèæ ®ãããïŒã®åçã§ãããV quã¯åã質åqã«å¯ŸãããŠãŒã¶ãŒuã®åçã§ãã ãŠãŒã¶ãŒãšè³ªåããšã«éèšããŸãã 質åãå°ãªãå ŽåïŒmâ 50ïŒãå€æ°ã®ã¢ã³ã±ãŒãããããŸãïŒnâ 10,000ïŒã 2è¡ç®ã«ã¯ããŠãŒã¶ãŒã®åèšïŒnã10,000ïŒãåé¢ãããåãåŒãå«ãŸããŠããŸãã q-sumã¯ãã®åŒå šäœã«åŒµãåºããŸããã€ãŸããããŒã¿ã¯è³ªåããšã«åé¡ãããå¿ èŠããããæ¯åããããéèšããå¿ èŠããããŸãããããã¯ããã50è¡ã§ãã ãããŠã10,000人ã®ãŠãŒã¶ãŒã®éãuãç§ãã¡ã¯åé¢ããèšç®ããŠä¿åããããšãã§ããŸãã 質åqã«å¯Ÿããåçã®åèšãS qãšããŠãäºä¹ã®åèšãR qãšããŠè¡šããšãéåžžã«ã³ã³ãã¯ããªåŒãåŸãããŸãã
S qãšR qã¯äºåã«èšç®ããŠãå¥ã®ããŒãã«ã«ä¿åã§ããŸãã
枬å®
ã·ã¹ãã ãã©ãã»ã©éãåäœããããæããããã«ãæœè±¡çãªãŠãŒã¶ãŒããæœè±¡çãªè³ªåãžã®ã©ã³ãã ãªåçãçæããã¹ã¯ãªãããäœæããŸããã ãã®ã¹ã¯ãªããã¯ãåçãšãã1ã€ã®ããŒãã«ã®ã¿ãåããŸãã ä»ã®ããŒãã«ã¯å¿ èŠãããŸããã
ã€ã³ããŒãsysãsqlite3ãã©ã³ãã ãitertools USERS = xrangeïŒ100000ïŒ è³ªå= xrangeïŒ50ïŒ conn = sqlite3.connectïŒ 'aggregation.sqlite3'ïŒ cur = conn.cursorïŒïŒ cur.executeïŒãååšããå Žåã¯ããŒãã«ããããããããåçïŒ; cur.executeïŒãããŒãã«ã®åçãäœæïŒuser_idæŽæ°ãquestion_idæŽæ°ãvalueæŽæ°ïŒãïŒ itertools.productã®uãqïŒãŠãŒã¶ãŒã質åïŒïŒ cur.executeïŒãåçå€ã«æ¿å ¥ïŒïŒãïŒãïŒïŒããïŒuãqãrandom.randintïŒ1ã100ïŒïŒïŒ ïŒããŒã¿å ¥ååŸã«ã€ã³ããã¯ã¹ãæ§ç¯ãã ïŒæ¿å ¥äžã«äºåæšãåæ§ç¯ããªãããã« cur.executeïŒ 'answerïŒuser_idïŒã«ã€ã³ããã¯ã¹answer_userãäœæ'ïŒ cur.executeïŒãåçïŒquestion_idïŒã«ã€ã³ããã¯ã¹answer_questionãäœæãïŒ conn.commitïŒïŒ cur.executeïŒ "" " ããŒãã«answer_summaryãäœæããŸã question_idãsumïŒvalueïŒvalueãsumïŒvalue * valueïŒvalue_squareãcountïŒ*ïŒnumãéžæããŸã çããã question_idã§ã°ã«ãŒãå "" "ïŒ cur.executeïŒãanswer_summaryïŒquestion_idïŒã«äžæã®ã€ã³ããã¯ã¹answer_questionãäœæãïŒ
100,000ãŠãŒã¶ãŒãžã®50å¿ç-500äžã¬ã³ãŒãã ç§ã®åŒ±ãã©ãããããïŒ1.5 GHz x2ããã³2 GBã®ã¡ã¢ãªïŒã§ã¯ãããŒãã«ã¯çŽ30åã§æ§ç¯ãããã¬ã³ãŒãæ°ã«å¿ãããã¡ã€ã«ã¯æ°åããæ°çŸã¡ã¬ãã€ãã§ããã
åèšãšäºä¹ã®åèšã§ããã€ãã®ã¯ãšãªãäœæããŸãããããã®äž»èŠ³çãªæèŠã以äžã«ç€ºããŸãã éèŠãªããšã¯ãLinuxãããŒã¿ããŒã¹ãã¡ã€ã«ãã¡ã¢ãªã«å®å šã«ãã£ãã·ã¥ããããšã§ãã ã€ãŸããèšç®ã®ã¿ãé ããªãå¯äžã®ããšãã€ãŸãã€ã³ããã¯ã¹æ€çŽ¢ãšè¿œå ã§ãã
ãããŠãçãã®éãã®çµ±èšãèæ ®ããå Žåã®çµæã¯æ¬¡ã®ãšããã§ãã
| | |
| | |
| | |
å¯äœçš
ããã°ã©ã ãããŒã¿ããŒã¹ãšéä¿¡ãã倧éã®è¡ïŒæ°åè¡ïŒãå¿ èŠãªå Žåã¯ããã¹ãŠã®ããŒã¿ãããã°ã©ã ã«è»¢éããŠéèšããã®ã§ã¯ãªããããŒã¿ããŒã¹ã«ãããå®è¡ãããã®ã劥åœã§ã-ããã«ãããªãŒããŒããããå¢å ããŸãã
ãã ããäŸã®ã¢ã³ã±ãŒãã®å Žåã®ããã«ãããŒã¿ãäºåã«èŠçŽãããŠããå Žåã¯ã50 + 50è¡ãããããŸããã ãã®ãããªããŒã¿ã¯ãå ã®åœ¢åŒã§ãã§ã«éžæãããã³ãŒããããç°¡æœã«ãªãããã°ã©ã ã§èšç®ãããŸãã
éã®æŽæ°ãåãæ¹æ³ã§å®è¡ã§ããŸããããŒãã«çµåã§è€éãªUPDATEã¯ãšãªãèšè¿°ããå¿ èŠã¯ãããŸãããããŒã¿ãéžæããŠè¿œå ããINSERT OR REPLACEã䜿çšããŠæŽæ°ã§ããŸãã
ã¢ãããŒããæ©èœããªãå Žå
é床èšã®äŸã«æ»ããŸãããã å¹³åé床ã¯ããã¡ãŒãã«/æã§ãã ãããã¡ãŒãã«/ç§ã«çŽç·çã«å€æã§ããŸãã km / hããm / sãŸã§æ°ããŠãããããéèšããå Žåãåãããšãèµ·ãããŸããã
å¹³åå€ãä¿åããå¹³å空æ°æµæïŒé床ã®2ä¹ã«æ¯äŸããïŒãèšç®ãããå Žåãå€ã®2ä¹ã®åèšã¯å€ã®åèšã§ã¯æ©èœããªããããæåããŸããã æåã®èŠ³å¯ãå¿ èŠã§ãã
ããã»ã©è€éã§ã¯ãªã
å®éãOLAPã§ã¯ãªãORMã®ã¿ã䜿çšããŠããå Žåã¯ãSQLã¯ãšãªã·ãŒããèšè¿°ããå¿ èŠã¯ãããŸãããSQLã¯ãšãªã·ãŒãã¯åŸã§ä¿å®ããå¿ èŠããããææªã®å Žåãä»ã®äººãç解ããå¿ èŠããããŸãã ãã®ãããªæé©åã¯ãé¢é£ã¢ãã«ã®åœ¢ã§è¡ãããšãã§ããŸãã Djangoã§ã¢ãã«ãæŽçããæ¹æ³ã¯æ¬¡ã®ãšããã§ãã
ã¯ã©ã¹è³ªåïŒã¢ãã«ïŒïŒ ããã¹ã= CharFieldïŒïŒ ã¯ã©ã¹ã®åçïŒã¢ãã«ïŒïŒ user = ForeignKeyïŒãŠãŒã¶ãŒïŒ question = ForeignKeyïŒè³ªåïŒ å€= IntegerFieldïŒïŒ ã¯ã©ã¹AnswerAggregateïŒã¢ãã«ïŒïŒ question = ForeignKeyïŒè³ªåãrelated_name =ãéèšãïŒ summ = IntegerFieldïŒïŒ summ_of_squares = IntegerFieldïŒïŒ answer_count = IntegerFieldïŒïŒ def add_to_aggregatesïŒ* kwargsïŒïŒ answer = kwargs ['instance'] answer.question.aggregates.updateïŒ summ = FïŒ 'summ'ïŒ+ answer.valueã summ_of_squares = FïŒ 'summ_of_squares'ïŒ+ answer.value ** 2ã answer_count = FïŒ 'answers_count'ïŒ+ 1 ïŒ def remove_from_aggregatesïŒ* kwargsïŒïŒ answer = kwargs ['instance'] answer.question.aggregates.updateïŒ summ = FïŒ 'summ'ïŒ-answer.valueã summ_of_squares = FïŒ 'summ_of_squares'ïŒ-answer.value ** 2ã answer_count = FïŒ 'answers_count'ïŒ-1 ïŒ Signals.post_add.connectïŒadd_to_aggregatesãmodel = AnswerïŒ Signals.pre_update.connectïŒremove_from_aggregatesãmodel = AnswerïŒ Signals.post_update.connectïŒadd_to_aggregatesãmodel = AnswerïŒ Signals.pre_delete.connectïŒremove_from_aggregatesãmodel = AnswerïŒ
åçãäœæãããšããããŸããŸãªéã«è¿œå ããŸãã åé€ããã«ã¯ãå€ãæžç®ããã ãã§ãã å€æŽããã«ã¯ãå€ãå€ãæžç®ããæ°ããå€ãè¿œå ããŸãã
é åçãªå®¿é¡ãšããŠãORMãŸãã¯SQLã§ã¯ãšãªãäœæããäžèšã®åŒããæšæºåå·®ãèšç®ã§ããŸãã
äŸ¡æ Œæ¹å
ãã®ãããªèšç®ãæé©åããããšãããã«é©åãã¯ãå¥ã®åé¡ã§ãã ã¢ã³ã±ãŒãã䜿çšããäŸã§ã¯ãæ°åã®ãŠãŒã¶ãŒã§ãã¬ããŒãã®åŠçé床ãäœäžãå§ãã1äžäººã®ãŠãŒã¶ãŒãããããæ°ç§éã§å®äºããŸããã ãã®ãããªéã®ããŒã¿ã¯ãå°èŠæš¡ãªãããžã§ã¯ãã§ããããã«ã¯å¶å©äŒæ¥ã§ãããªãéæå¯èœã§ãã ä»æ¥ã®éåžžã®ããŒã¿ããŒã¹ã¯ããã®ãããªæé©åãèªåçã«è¡ããŸããã æé©åã¯OLAPããŒã¿ããŒã¹ã«çµã¿èŸŒãŸããŠããŸãããå°èŠæš¡äŒæ¥ã«ãšã£ãŠã¯é«äŸ¡ã§ããã°ããŸãã ãããã£ãŠããã®ãããªå°ããªæé©åã¯è¯ã解決çã«ãªããŸãã
ãã®ãããªæé©åã®äŸ¡æ Œã¯æ¬¡ã®ãšããã§ãã
1.æ°åŒãå°ãåºããç解ããŸããããã«ã¯ãæ°åŠççµ±èšã®ååãªç¥èãå¿ èŠã§ãã
2. ORMã§ããªã¬ãŒãŸãã¯ããã·ãŒãžã£ãäœæãããããã°ããŸãã
3.æ°ããåŸæ¥å¡ãéåžžã®éèšé¢æ°ã®äœ¿çšãéå§ããªãããã«ãã·ã¹ãã ã詳现ã«ææžåããŸãã
ãŸãšã
ãŸãã枬å®çµæãããããããã«ããŠãããã®ã¡ã€ã³ãã¬ãŒãïŒSUMãAVGïŒã¯ãã£ã¹ã¯ããŸã£ããèªã¿åã£ãŠãããããããåèšããŠããŸãã
第äºã«ãè€éãªéçŽé¢æ°ã§ãããå解ã§ãããããã®äžã§éçŽãåºå¥ã§ããŸãã å·®ã®2ä¹ãã©ã®ããã«æåã«å解ãããéã®åèšãšãããã®2ä¹ã®åèšãåºå¥ããããã瀺ããŸããã éé¡ã¯äºåã«èšç®ããŠä¿åããããšãã§ããŸãã
ã¬ããŒãã®ãªãœãŒã¹æ¶è²»ã¯ã芳枬æ°OïŒnïŒã«æ¯äŸããŠæžå°ããŸãã ã®ã¬ãã€ãã®ããŒã¿ãä¿åããã·ã¹ãã ã§ã¯ãããã«ããäœæ¥ãå€§å¹ ã«å éãããå¯èœæ§ããããã¬ããŒãã¯æ倧1ç§ã§å éãããŸãã
第äžã«ãéèšãå®å šã«åã«ãŠã³ãããããšãªããæ°ããããŒã¿ãè¿œå ããå€ãããŒã¿ãç·šéããã³åé€ã§ããŸãã åèšç®ã®ãªãœãŒã¹æ¶è²»ãOïŒnïŒåæžå°ããŸãã
第4ã«ãå°æ°ã®è¡ãã€ãŸãéèšã®ã¿ã§äœæ¥ãããšãããŒã¿ã®éãæžå°ããããŒã¿ããŒã¹ããååŸããŠããã°ã©ã ã³ãŒãã§çŽæ¥èšç®ã§ãããããé¢åãªSELECTãŸãã¯UPDATEã¯ãšãªãåé¿ã§ããŸãã
æåŸãŸã§èªãã 人ã®ããã«ïŒèšäºã®äžçªæåã®ãªã¹ãã¯æ¶ç©ºã®ãã®ã§ãã