åã®è¨äºã®ééããææãã¦ããã ãã¦ãããã°ãããè¨äºã§ããåã®è¨äºãããã¡ãã®è¨äºãã覧ãã ããã
http://archive.guma.jp/2010/12/twitter-json.html
å
æ¥ã29æ¥ã®7æéãããã«Twitterã®ã¹ãã¼ã¿ã¹IDã53bitãè¶ãã¾ããã
ãããªä¸éå端ãªãããæ°ãè¶
ããã ãã§ãªããããªè¨äºã«ãããã¨ããã¨ãä¸é¨ã®ã¯ã©ã¤ã¢ã³ãã§åä½ããããããªããã¨ãããããã§ãã
(14:14ã追è¨ãã¾ãã)
(14:31ããã²ã¨ã¤è¿½è¨ãã¾ãã)
Twitterã®APIã¯XMLã¨JSONã®2種é¡ã§çµæãåå¾ã§ãã¾ãããã®ãã¡XMLã§å¦çãã¦ãå ´åã¯å
é¨ã§64bit INTã§å¦çãã¦ããã°ç¹ã«åé¡ã¯èµ·ãã¾ããã
åé¡ãèµ·ããã®ã¯JSONã®å ´åã§ããJSONã¯Javascriptã§evalããã°ãã®ã¾ã¾ä¸èº«ãåãåºãããã¨ããããããããã«ãJavascriptã®é£æ³é
åãªã©ã®è¨è¿°ãã®ãã®ã§ããããã¦ãJavascriptã«ãããæ°å¤åã¨ããã®ã¯64bit æµ®åå°æ°ã§è¡¨ç¾ããã¾ãã
ãã®64bit æµ®åå°æ°ã¯1bitã®ç¬¦å·é¨ã11bitã®ææ°é¨ã52bitã®ä»®æ°é¨ããæ§æããã¾ãããã®64bitã®æ°å¤ããå®éã®å¤ã¯sã¯ç¬¦å·é¨, eã¯ææ°é¨, mã¯ä»®æ°é¨ã¨ããå ´åã
(-1)^s*2^e*mã¨ããå¼ã§æ±ãããã¾ããä»®æ°é¨ã¯52bitã§ããã2鲿°ã®å°æ°ç¹æ°ã¨ãã¦ãããããéã®1.10010101... ã®æ´æ°é¨åã1ãçç¥ãããã¨ã«ãªã£ã¦ããã®ã§å®éã®å¤ã¯53bitåä¿æã§ãã¾ãã
ãã®ãã¨ãããJavascriptã§ã¯2^52*0b1.1111111111111111111111111111111111111111111111111111ã®9007199254740991ãæ£ããæ±ããã¨ã®ã§ããæå¤§ã®å¤ã«ãªã£ã¦ãã¾ãã¾ãã
ããããªãã§Twitterã®IDãæ¥ã«53bitãçªç ´ãããããªãã¨ã«ãªã£ãã®ãã
æè¿ãã¨ãã£ã¦ã11æã®é ããããã§ãããåã
ããã¢ãã¦ã³ã¹ããã¦ããããã«Twitterã¯IDçæã¢ã«ã´ãªãºã ãSnowflakeã¨å¼ã°ãããã®ã«å¤æ´ãã¾ããã
ãã®Snowflakeã§ã¯64bitã®æ´æ°ãçæãã¦ã64bitã®å
訳ã¯ã1bitã¯SignFlagãªã®ã§ç½®ãã¦ããã¦ã41bitã®Epochç§ãå°ãå¤å½¢ãããããªç§ã10bitã®MachineIDã12bitã®ãã1ç§ã®ç¯å²ã«ããããã·ã³å
ã§ã®ã¦ãã¼ã¯ãªIDããæ§æããã¦ãã¾ãã
ãã®ãã¨ããè¦ã¦ãããããã«ãSnowflakeã¯IDãçæããã ãã®ãµã¼ããè¤æ°å°ç¨æãã¦IDçæã®è² è·åæ£ãããããã«å¤æ´ãããã®ã¨æããã¾ãã
ãã¦ãidä¸ã«æå»ãå«ã¾ãã¦ããããã«ãããç¹å®ã®æ¥ãå¢ã«JSONã§æ£ãããã¼ã¹ã§ããªããªã£ã¦ãã¾ãã¾ãããEpochç§ãå°ãå¤å½¢ãã¨æ¸ãã¾ããããå®éã«ã¯Epochç§ã®ããªç§è¡¨ç¾ - 1288834974657ã¨ããè¨ç®ã®çµæã使ç¨ãã¦ãã¾ãã
ãã®ãã¨ãã53bitãçªç ´ãã¦54bitç®ä»¥éã使ç¨ãã¦ãã¾ãã®ã¯2010/11/29 07:14:18.304(JST)ã¨ãªãããã§ãã
å®éã«ã¯MachineIDããã·ã³å
ã§ã¦ãã¼ã¯ãªIDã¯0åãããã¦ãããã¨ãå¤ããæµ®åå°æ°ã®èª¤å·®ãåºã¦ããã¾ãåé¡ã«ãªããªããã¨ãå¤ãã§ããããã·ã³å
ã§ã¦ãã¼ã¯ãªIDã0ã§ãªãå ´åã«æµ®åå°æ°ã®èª¤å·®ã§æ¬æ¥æå³ããªãã¹ãã¼ã¿ã¹ãæã示ãã¦ãã¾ãå¯è½æ§ãããã¾ãã
ãã®ããã«53bitãè¶ããå¤ãæ£ããæ±ããªãããã«JSONã«ã¯id_strã¨ããå¤ã追å ããã¦ãã¾ããid_strã¯ã¹ãã¼ã¿ã¹IDãæååã¨ãã¦è¡¨ç¾ãããã®ã§ãJavascriptãªã©ã§ã¯53bitè¶ããã¨æ£ããæ±ããªãããæååã¨ãã¦ãã¤ãã£ã¦ã¡ãï¼ã¨ãä¸ã®äººãè¨ã£ã¦ãã¾ããã
æå³ããªãã¹ãã¼ã¿ã¹IDãæã示ãã¦ãã¾ã£ãå ´åãå ¨ç¶ãããªãã²ã¨ã«Replyãã¦ãã¾ã£ãããã¦ã¼ã¶ãæå³ããPostã¨éã£ãPostãFavoriteãã¦ãã¾ã£ãããin_reply_to_status_idãããªãã©ã¤ãåå¾ãããå ¨ç¶éãã®ãåå¾ã§ãã¦ãã¾ã£ãã§ãããããªã©ã¨ãããã¨ãèµ·ããã¾ãã
ããããã«ãJSONã使ã£ã¦TwitterAPIãå©ç¨ãã¦ããå ´åãã¹ãã¼ã¿ã¹IDãæååã¨ãã¦æ±ãã³ã¼ãã«å¤æ´ãã¾ãããããã¨ãããã¨ã§ããã
ã¡ãªã¿ã«PHPãä¼¼ããããªåé¡ãçºçãã¾ãã32bitã·ã¹ãã ã ã¨2147483647ãè¶ ããå¤ã¯floatã§æ±ãããPHPã®floatã¯å精度ãªã®ã§53bit以ä¸ã®å¤ã...(æåã«æ»ã) ã¨ãããã¨ã§ããæååã§æ±ããã64bitç°å¢ã§intã¨ãã¦æ±ããããªãã¨ãããªãã¿ããã§ãã
追è¨ï¼twitter4jã®ãããªã©ã¤ãã©ãªãJSONãæ±ã£ã¦ãããªãåé¡ãèµ·ããããããã¾ãããJSONã仿§æ¸éãã«ãã¼ã¹ããã¨idã®å¤ã¯doubleãªã®ã§æçµçãªåã64bitæ´æ°åã§ãã£ã¦ãdoubleã®æç¹ã§å¤ãåãã¦ãã¾ãã®ã§åãåé¡ãçºçãã¾ããid_strããã¼ã¹ãã¦longãªã©ã®64bitæ´æ°åã¸å¤æããããidã®å¤ã仿§æ¸ãç¡è¦ãã¦64bitæ´æ°åã§ãã¼ã¹ããªãã¨ã ãã§ãã
追è¨ï¼twitter4jã®ã³ã¼ããèªãã ã¨ãããidãæååã¨ãã¦ãã¼ã¹ããå¾longã¸å¤æãã¦ããã®ã§ä»åã®åé¡ã¯çºçãã¾ããã