é ããæ©ãããããããããªãã¯ç§ãã¡ã®äŒç€Ÿã®ããã«ãããªãã®è£œåã§äœ¿çšããããµãŒãã¹ã®æ°ãåçã«å¢å ããç¶æ³ã«ééãããããããŸããã ãããä»æ¥ã®ãèªå€§åºåããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ãžã®ç§»è¡ãåå ã§èµ·ãã£ãã®ãããããšãå°èŠæš¡ãªæ¹åã®æ³šæãåããŠããããäžé£ã®ãµãŒãã¹ã§å®è£ ããã®ãã¯åé¡ã§ã¯ãããŸããã éèŠãªããšã¯ããã®ç¬éããã補åã«2ã€ã®æ°ããåé¡ãçºçããããšã§ããå¥ã ã®ãµãŒãã¹éã§ããŒã¿éãå¢ããå Žåã®å¯ŸåŠæ¹æ³ãããã³å€æ°ã®ãµãŒãã¹ã®éçºãšãµããŒãã«ãããæ··ä¹±ãé²ãæ¹æ³ã§ãã 2çªç®ã®åé¡ã«ã€ããŠå°ã説æããŸãããããµãŒãã¹ã®æ°ãæ°çŸä»¥äžã«ãªããšã1ã€ã®éçºããŒã ããµãŒãã¹ãéçºããã³ãµããŒãã§ããªããªãããããµãŒãã¹ã®ãã³ãã«ãç°ãªãããŒã ã«é åžããŸãã ããã§éèŠãªã®ã¯ãããããã¹ãŠã®ããŒã ãRPCã«åã圢åŒã䜿çšããŠããããšã§ããããããªããšãäžæ¹ã®ããŒã ãä»æ¹ã®ãµãŒãã¹ããµããŒãã§ããªãå ŽåããæŸèæãšã®ãžã£ã³ã¯ã·ã§ã³ãååã«å§çž®ããªããš2ã€ã®ãµãŒãã¹ã ããåããªãå Žåã«ããã®ãããªå€å žçãªåé¡ãçºçããŸãã ããããããã«ã€ããŠã¯å¥ã®èšäºã§èª¬æããä»æ¥ã¯ããŒã¿ã®å¢å ãšããæåã®åé¡ã«æ³šæãæããããã«ã€ããŠäœãã§ããããèããŸãã ãããŠãæ£çµ±æŽŸã®æ lazã®ããã«ãç§ãã¡ã¯äœãããããããŸããããäžè¬çãªã³ãŒãã«æ°è¡ãè¿œå ããŠãããã«å©çãåŸãããšæã£ãŠããŸãã ãã®èšäºã§ã¯ãããããå§ããŸããã€ãŸããã·ãªã¢ã©ã€ã¶ãæ€èšããŸããã·ãªã¢ã©ã€ã¶ã®åã蟌ã¿ã«ã¯ãçŸããRPCã§ã®å€§ããªå€æŽã¯å¿ èŠãããŸããã
å®éãçŸåšã®è£œåã§ã¯xml圢åŒã䜿çšããŠã³ã³ããŒãã³ãéã§æ å ±ã亀æããŠããããã圢åŒã®åé¡ã¯åœç€Ÿã«ãšã£ãŠããªãèŠçã§ãã ããããç§ãã¡ã¯ããŸãã¹ãã§ã¯ãããŸãããããŒã¿äº€æã«xmlã䜿çšããã®ã¯10幎åã«äŸ¡å€ããã£ãããšãç解ããŠããŸãããããããŸãã«ãã®çç±ã§ãã補åã¯ãã§ã«10幎åã§ã ã å°ãæ€èšããããªããªãããåŸãããŒã¿ã®ä¿åãšéä¿¡ã«JSONã䜿çšããããšã«ããŸããããéä¿¡ãããããŒã¿ã®ãµã€ãºãéèŠã§ãããããJSONããã±ãŒãžã³ã°ãªãã·ã§ã³ãéžæããå¿ èŠããããŸãïŒãã®çç±ã以äžã§èª¬æããŸãïŒã
ç§ãã¡ã¯ç§ãã¡ã«åã£ã圢åŒãéžæããåºæºã®ãªã¹ãããŸãšããŸããïŒ
- ããŒã¿å§çž®ã®æå¹æ§ã åœç€Ÿã®è£œåã¯ãããŸããŸãªãœãŒã¹ããã®èšå€§ãªæ°ã®å
¥åã€ãã³ããåŠçããŸãã åã€ãã³ãã¯ãäœããã®ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã«ãã£ãŠããªã¬ãŒãããŸãã åºæ¬çã«ãã€ãã³ãã¯å°ãããäœãèµ·ãã£ãŠãããã«é¢ããã¡ã¿æ
å ±ãå«ãã§ããŸã-æçŽãéã£ãããFacebookã§äœãããã£ããããããªã©ã -ããããããŒã¿ãå«ãããšããããããªã倧ããªãµã€ãºã§ãã ããã«ããã®ãããªã€ãã³ãã®æ°ã¯éåžžã«å€ãã1æ¥ã«æ°åTBãç°¡åã«éä¿¡ã§ãããããã€ãã³ãã®ãµã€ãºãç¯çŽããããšãéèŠã§ãã
- ç°ãªãèšèªã§äœæ¥ããèœåã æ°ãããããžã§ã¯ãã¯C ++ãPHPãããã³JSã䜿çšããŠèšè¿°ãããŠããããããããã®èšèªã®ãµããŒãã«ã®ã¿é¢å¿ããããŸãããããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã«ããç°çš®éçºç°å¢ãå¯èœã«ãªããããè¿œå ã®èšèªã®ãµããŒãã圹ç«ã¡ãŸãã goã¯ç§ãã¡ã«ãšã£ãŠéåžžã«èå³æ·±ããã®ã§ãããããã€ãã®ãµãŒãã¹ãå®è£
ãããå¯èœæ§ããããšããŸãããã
- ããŒãžã§ã³ç®¡ç/é²åããããŒã¿æ§é ã®ãµããŒãã åœç€Ÿã®è£œåã¯é¡§å®¢ããæŽæ°ãããããšãªãé·æéåç¶ããããïŒæŽæ°ããã»ã¹ã¯ãŸã£ããåçŽã§ã¯ãããŸããïŒãããæç¹ã§ãµããŒãã«å€ãããããŒãžã§ã³ãååšããäºææ§ã倱ãããšãªãã¹ãã¬ãŒãžãã©ãŒããããç°¡åã«éçºã§ããããšãéèŠã§ãæ¢ã«ããã¯ãããããŒã¿ã
- 䜿ããããã Thriftãããã³ã«ã䜿çšããŠã³ã³ããŒãã³ãéã®éä¿¡ãæ§ç¯ããçµéšããããŸãã æ£çŽãªãšãããéçºè
ãRPCãã©ã®ããã«æ©èœããå€ãã³ãŒããå£ãããšãªãæ¢åã®ã³ãŒãã«äœããè¿œå ããæ¹æ³ãç解ããããšã¯å¿
ããã容æã§ã¯ãããŸããã ãããã£ãŠãã·ãªã¢ã«å圢åŒã䜿çšããæ¹ãç°¡åã§ããã»ã©ãC ++éçºè
ãšJSéçºè
ã®ã¬ãã«ã¯å®å
šã«ç°ãªããããããåªããŠããŸã:)
- ããŒã¿ãã©ã³ãã ã«èªã¿åãæ©èœïŒã©ã³ãã ã¢ã¯ã»ã¹èªã¿åã/æžã蟌ã¿ïŒã ãŸããããŒã¿ã¹ãã¬ãŒãžã«éžæããã圢åŒã䜿çšããããšãæå³ãããããããŒã¿å
šäœã®èªã¿åããè¡ããªãããã«ããŒã¿ã®éšåçãªéã·ãªã¢ã«åã®å¯èœæ§ããµããŒãããããšã¯çŽ æŽãããããšã§ãã ããŒã¿ã®èªã¿åãã«å ããŠã倧ããªãã©ã¹ã¯ããã¹ãŠã®ã³ã³ãã³ããå·®ãåŒãããšãªãããŒã¿ãå€æŽã§ããããšã§ãã
é©åãªæ°ã®ãªãã·ã§ã³ãåæããåŸã次ã®åè£ãéžæããŸããã
- ãžã§ã³ãœã³
- BSON
- ã¡ãã»ãŒãžããã¯
- Cbor
ãããã®åœ¢åŒã§ã¯ãéä¿¡ããŒã¿ã®IDLã¹ããŒã ã®èª¬æã¯å¿ èŠãããŸããããããŒã¿ã¹ããŒã ãå«ãŸããŠããŸãã ããã«ããäœæ¥ãå€§å¹ ã«ç°¡çŽ åãããã»ãšãã©ã®å Žåã10è¡ä»¥äžã®ã³ãŒããèšè¿°ããã ãã§ãµããŒããè¿œå ã§ããŸãã
ãŸãããããã³ã«ãŸãã¯ã·ãªã¢ã©ã€ã¶ãŒã®ããã€ãã®èŠå ããã®å®è£ ã«å€§ããäŸåããŠããããšãååã«èªèããŠããŸãã C ++ã§ããŸãæ©èœãããã®ã¯ãJavascriptã§ã¯ããŸãæ©èœããªãå¯èœæ§ããããŸãã ãããã£ãŠãå®éšã§ã¯ãJSãšGoã®å®è£ ã䜿çšãããã¹ããå®è¡ããŸãã ãã©ãŠã¶ãšnodejsã®å¿ å®æ§ã®ããã«JSå®è£ ãæšé²ããŸãã
ããã§ã¯ãæ€èšã«ç§»ããŸãããã
ãžã§ã³ãœã³
æ€èšäžã®æãåçŽãªçžäºäœçšåœ¢åŒã ä»ã®åœ¢åŒãæ¯èŒãããšãã¯ãçŸåšã®ãããžã§ã¯ãã§ãã®å¹æã瀺ãããã¹ãŠã®æ¬ ç¹ã瀺ãããããåç §ãšããŠäœ¿çšããŸãã
é·æïŒ
- å¿ èŠãªã»ãŒãã¹ãŠã®ããŒã¿åããµããŒãããŸãã ãã€ããªããŒã¿ããµããŒããããŠããªãããšã«äžæºãèšããããããŸããããããã§ã¯base64ãçãããšãã§ããŸãã
- 人ãèªã¿ãããããããããã°ãç°¡å
- ããããã®èšèªã§ãµããŒããããŠããŸãïŒãã ããGoã§JSONã䜿çšãã人ã¯ãããã§unningããŠããããšãç解ããŸãïŒ
- JSONã¹ããŒã ãä»ããŠããŒãžã§ã³ç®¡çãå®è£ ã§ããŸã
çæïŒ
- JSONã¯xmlãšæ¯èŒããŠã³ã³ãã¯ãã§ããã«ããããããã1æ¥ã«ã®ã¬ãã€ãã®ããŒã¿ãéä¿¡ããããããžã§ã¯ãã§ã¯ããã£ãã«ãšãã®äžã«ããŒã¿ãä¿åããã®ã¯äŸç¶ãšããŠããªãç¡é§ã§ãã ãã€ãã£ãJSONã®å¯äžã®ãã©ã¹ã¯ãã¹ãã¬ãŒãžã«PostgreSQLã䜿çšããããšã ãã§ãïŒjsobãæäœããæ©èœãåããŠããŸãïŒã
- éšåçãªããŒã¿ã®éã·ãªã¢ã«åã¯ãµããŒããããŠããŸããã JSONãã¡ã€ã«ã®éäžããäœããååŸããã«ã¯ãæåã«ç®çã®ãã£ãŒã«ãã®åã«ãããã¹ãŠããã·ãªã¢ã©ã€ãºããå¿ èŠããããŸãã ãŸããããã«ãããã¹ããªãŒã åŠçã«ãã©ãŒãããã䜿çšã§ããªããªããŸããããã¯ããããã¯ãŒã¯éä¿¡ã«åœ¹ç«ã€å ŽåããããŸãã
ããã©ãŒãã³ã¹ã§äœãåŸããããèŠãŠã¿ãŸãããã æ€èšããéã«ã¯ãããã«JSONã®ãµã€ãºã®äžè¶³ãèæ ®ã«å ¥ããzlibã䜿çšããŠJSONãããã³ã°ã§ãã¹ããè¡ããŸãã ãã¹ãã§ã¯ã次ã®ã©ã€ãã©ãªã䜿çšããŸãã
- http://nodeca.github.io/pako/-JS㧠JSONãããã±ãŒãžåãããã
- http://github.com/klauspost/compress-Go㧠JSONãããã¯ãããã
- http://github.com/pquerna/ffjson-Goã®JSONã·ãªã¢ã©ã€ã¶ãŒãšããŠ
ãœãŒã¹ãšãã¹ãŠã®ãã¹ãçµæã¯ã次ã®ãªã³ã¯ã«ãããŸãã
Go- https://github.com/KyKyPy3/serialization-tests
JSïŒããŒãïŒ -https://github.com/KyKyPy3/js-serialization-tests
JSïŒãã©ãŠã¶ïŒ -http://jsperv.com/serialization-benchmarks/5
çµéšçã«ãç°ãªããã¹ãããŒã¿ã§ã®ãã¹ãçµæã¯åçã«ç°ãªãããããã¹ãã®ããŒã¿ã¯å®éã®ããŒã¿ã«ã§ããã ãè¿ã¥ããå¿ èŠãããããšãããããŸããã ãã®ããã圢åŒãèŠéããªãããšãéèŠãªå Žåã¯ãåžžã«çŸå®ã«æãè¿ãããŒã¿ã§ãã¹ãããŠãã ããã çŸå®ã«è¿ãããŒã¿ã§ãã¹ãããŸãã ãã¹ããœãŒã¹ã§ããããèŠãããšãã§ããŸãã
JSONã§åŸããããã®ã¯æ¬¡ã®ãšããã§ãã 以äžã¯ãåèšèªã®ãã³ãããŒã¯çµæã§ãã
JSïŒããŒãïŒ | |
---|---|
JSONãšã³ã³ãŒã | 21,507 ops /ç§ïŒ86åã®ãµã³ããªã³ã°ïŒ |
JSONãã³ãŒã | 9,039 ops /ç§ïŒ89åã®å®è¡ããµã³ããªã³ã°ãããŸããïŒ |
ãžã§ã³ãœã³åŸåŸ© | 6.090 ops /ç§ïŒ93åã®ãµã³ãã«å®è¡ïŒ |
JSONå§çž®ãšã³ã³ãŒã | 1,168 ops /ç§ïŒ84åã®å®è¡ããµã³ããªã³ã°ïŒ |
JSONå§çž®ãã³ãŒã | 2,980 ops /ç§ïŒ93åã®å®è¡ãµã³ããªã³ã°ïŒ |
Json CompresåŸåŸ© | 874 ops /ç§ïŒ86åã®ãµã³ãã«å®è¡ïŒ |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³åŸåŸ© | 5,754 ops /ç§ |
Json CompresåŸåŸ© | 890 ops /ç§ |
è¡ã | |||||
---|---|---|---|---|---|
JSONãšã³ã³ãŒã | 5000 | 391100 ns / op | 24.37 MB /ç§ | 54520 B / op | 1478 allocs / op |
JSONãã³ãŒã | 3000 | 392785 ns / op | 24.27 MB /ç§ | 76634 B / op | 1430å²ãåœãŠ/ op |
ãžã§ã³ãœã³åŸåŸ© | 2000幎 | 796115 ns / op | 11.97 MB / s | 131150 B / op | 2908 allocs / op |
JSONå§çž®ãšã³ã³ãŒã | 3000 | 422254 ns / op | 0.00 MB /ç§ | 54790 B / op | 1478 allocs / op |
JSONå§çž®ãã³ãŒã | 3000 | 464569 ns / op | 4.50 MB /ç§ | 117206 B / op | 1446 allocs / op |
Json CompresåŸåŸ© | 2000幎 | 881305 ns / op | 0.00 MB /ç§ | 171795 B / op | 2915 allocs / op |
ãããŠãããŒã¿ãµã€ãºã«é¢ããŠã¯æ¬¡ã®ããã«ãªããŸããã
JSïŒããŒãïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ãã®æ®µéã§ãJSONå§çž®ã¯åªããçµæããããããŸãããåŠçé床ã®äœäžã¯åã«æ²æšã§ãããšçµè«ä»ããããšãã§ããŸãã å¥ã®çµè«ïŒJSã¯JSONã§æ£åžžã«æ©èœããŸãããããšãã°goã«ã€ããŠã¯èšããŸããã ä»ã®èšèªã§JSONãåŠçãããšãJSã«å¹æµããªãçµæã衚瀺ãããå¯èœæ§ããããŸãã ãšãããããJSONã®çµæãèã«çœ®ããä»ã®åœ¢åŒã§ã©ã®ããã«ãªããã確èªããŠãã ããã
BSON
ãã®ããŒã¿åœ¢åŒã¯MongoDbããã®ãã®ã§ãããç©æ¥µçã«æšé²ããŠããŸãã ãã®ãã©ãŒãããã¯ããšããšããŒã¿ã¹ãã¬ãŒãžçšã«éçºããããã®ã§ããããã¯ãŒã¯çµç±ã§ã®éä¿¡ãç®çãšããŠããŸããã§ããã æ£çŽãªãšãããã€ã³ã¿ãŒãããã§ç°¡åã«æ€çŽ¢ããçµæãBSONãå éšã§äœ¿çšããæ·±å»ãªè£œåã¯1ã€ãèŠã€ãããŸããã§ããã ãããããã®ãã©ãŒããããç§ãã¡ã«äœãããããããèŠãŠã¿ãŸãããã
é·æïŒ
- è¿œå ã®ããŒã¿åã®ãµããŒãã
ä»æ§ã«ãããšãBSON圢åŒã¯ãJSON圢åŒã®æšæºããŒã¿åã«å ããŠãDateã ObjectId ãNullãBinaryããŒã¿ãªã©ã®åããµããŒãããŠããŸãã ãããã®ããã€ãïŒããšãã°ãObjectIdïŒã¯ãMongoDbã§ããé »ç¹ã«äœ¿çšãããä»ã®äººã«ãšã£ãŠã¯å¿ ããã圹ç«ã€ãšã¯éããŸããã ãã ããããã€ãã®è¿œå ã®ããŒã¿åã«ã¯ã次ã®ããŒãã¹ããããŸãã ãªããžã§ã¯ãã«æ¥ä»ãä¿åããå ŽåãJSON圢åŒã®å Žåãä¿åãªãã·ã§ã³ã¯1ã€ã ãã§ããããã¯ISO-8601ãªãã·ã§ã³ã®1ã€ã§ãããæååè¡šçŸã§ãã åæã«ãæ¥ä»ã«ãã£ãŠJSONãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ããã£ã«ã¿ãŒåŠçããå ŽåãåŠçäžã«æååãæ¥ä»åœ¢åŒã«å€æããŠãããããããçžäºã«æ¯èŒããå¿ èŠããããŸãã äžæ¹ãBSONã¯ãã¹ãŠã®æ¥ä»ãïŒæ¥ä»åãšåæ§ã«ïŒInt64ãšããŠä¿åããæ¥ä»åœ¢åŒã§ã®ãã¹ãŠã®ã·ãªã¢ã«å/éã·ãªã¢ã«åäœæ¥ãåŠçããŸãã ãããã£ãŠããã·ãªã¢ã©ã€ãºãªãã§æ¥ä»ãæ¯èŒã§ããŸã-æ°åã®ããã«ãã¯ã©ã·ãã¯JSONã䜿çšããããŒãžã§ã³ããæããã«é«éã§ãã ãã®å©ç¹ã¯ãMongoDbã§ç©æ¥µçã«äœ¿çšãããŠããŸãã
- BSONã¯ãããŒã¿ãžã®ããããã©ã³ãã èªã¿åã/æžã蟌ã¿ããµããŒãããŠããŸãã
BSONã¯æååãšãã€ããªããŒã¿ã®é·ããä¿åãããããèå³ã®ãªãå±æ§ãã¹ãããã§ããŸãã JSONã¯ããŒã¿ãã·ãŒã±ã³ã·ã£ã«ã«èªã¿åããæåŸãŸã§å€ãèªã¿åããªãéããèŠçŽ ãèŠéãããšã¯ã§ããŸããã ãããã£ãŠããã©ãŒãããå ã«å€§éã®ãã€ããªããŒã¿ãæ ŒçŽããå Žåããã®æ©èœã¯éèŠãªåœ¹å²ãæããããšãã§ããŸãã
çæïŒ
- ããŒã¿ã®ãµã€ãºã
æçµçãªãã¡ã€ã«ã®ãµã€ãºã«é¢ããŠã¯ããã¹ãŠããããŸãã§ãã ç¶æ³ã«ãã£ãŠã¯ããªããžã§ã¯ãã®ãµã€ãºãå°ãããªããå Žåã«ãã£ãŠã¯ããªããžã§ã¯ãã®Bsonå ã«ãããã®ã«äŸåããŸãã ãªããããªã®ã§ããããïŒãªããžã§ã¯ãã®èŠçŽ ãžã®ã¢ã¯ã»ã¹é床ã®ããã«ããã©ãŒãããã¯å€§ããªèŠçŽ ã®ããŒã¿ãµã€ãºãªã©ã®è¿œå æ å ±ãä¿åãããšããä»æ§ããããŸãã
ããšãã°ãJSONãªããžã§ã¯ã
{«hello": "world»}
ããã«ãªããŸãïŒ
\x16\x00\x00\x00 // total document size \x02 // 0x02 = type String hello\x00 // field name \x06\x00\x00\x00world\x00 // field value \x00 // 0x00 = type EOO ('end of object')
ä»æ§ã§ã¯ãå°ãªããšãIntåãšããŠæ°å€ãæ ŒçŽããæååããã®è§£æã«æéãç¡é§ã«ããªããšããäºå®ã«ãããBSONã¯é«éã·ãªã¢ã«å/éã·ãªã¢ã«åãåãã圢åŒãšããŠéçºããããšè¿°ã¹ãŠããŸãã èŠãŠã¿ãŸãããã ãã¹ãã®ããã«ã次ã®ã©ã€ãã©ãªã䜿çšããŸããã
- JSïŒããŒãããã³ãã©ãŠã¶ãŒïŒ -https://github.com/mongodb/js-bson
- Go- https://github.com/go-mgo/mgo/tree/v2
ãããŠãããã«åŸãããçµæããããŸãïŒããããããããããã«ãJSONã®çµæãè¿œå ããŸããïŒã
JSïŒããŒãïŒ | |
---|---|
JSONãšã³ã³ãŒã | 21,507 ops /ç§ïŒ86åã®ãµã³ããªã³ã°ïŒ |
JSONãã³ãŒã | 9,039 ops /ç§ïŒ89åã®å®è¡ããµã³ããªã³ã°ãããŸããïŒ |
ãžã§ã³ãœã³åŸåŸ© | 6.090 ops /ç§ïŒ93åã®ãµã³ãã«å®è¡ïŒ |
JSONå§çž®ãšã³ã³ãŒã | 1,168 ops /ç§ïŒ84åã®å®è¡ããµã³ããªã³ã°ïŒ |
JSONå§çž®ãã³ãŒã | 2,980 ops /ç§ïŒ93åã®å®è¡ãµã³ããªã³ã°ïŒ |
Json CompresåŸåŸ© | 874 ops /ç§ïŒ86åã®ãµã³ãã«å®è¡ïŒ |
Bsonãšã³ã³ãŒã | 93.21 ops /ç§ïŒãµã³ããªã³ã°æ°76åïŒ |
Bsonãã³ãŒã | 242 ops /ç§ïŒ84åã®ãµã³ããªã³ã°ãå®è¡ïŒ |
BsonåŸåŸ© | 65.24 ops /ç§ïŒ65åã®å®è¡ãµã³ããªã³ã°ïŒ |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³åŸåŸ© | 5,754 ops /ç§ |
Json CompresåŸåŸ© | 890 ops /ç§ |
BsonåŸåŸ© | 374 ops /ç§ |
è¡ã | |||||
---|---|---|---|---|---|
JSONãšã³ã³ãŒã | 5000 | 391100 ns / op | 24.37 MB /ç§ | 54520 B / op | 1478 allocs / op |
JSONãã³ãŒã | 3000 | 392785 ns / op | 24.27 MB /ç§ | 76634 B / op | 1430å²ãåœãŠ/ op |
ãžã§ã³ãœã³åŸåŸ© | 2000幎 | 796115 ns / op | 11.97 MB / s | 131150 B / op | 2908 allocs / op |
JSONå§çž®ãšã³ã³ãŒã | 3000 | 422254 ns / op | 0.00 MB /ç§ | 54790 B / op | 1478 allocs / op |
JSONå§çž®ãã³ãŒã | 3000 | 464569 ns / op | 4.50 MB /ç§ | 117206 B / op | 1446 allocs / op |
Json CompresåŸåŸ© | 2000幎 | 881305 ns / op | 0.00 MB /ç§ | 171795 B / op | 2915 allocs / op |
Bsonãšã³ã³ãŒã | 10,000 | 249024 ns / op | 40.42 MB /ç§ | 70085 B / op | 982 allocs / op |
Bsonãã³ãŒã | 3000 | 524408 ns / op | 19.19 MB /ç§ | 124777 B / op | 3580å²ãåœãŠ/ op |
BsonåŸåŸ© | 2000幎 | 712524 ns / op | 14.13 MB / s | 195334 B / op | 4562 allocs / op |
ãããŠãããŒã¿ãµã€ãºã«é¢ããŠã¯æ¬¡ã®ããã«ãªããŸããã
JSïŒããŒãïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 112710ãã€ã |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 9618ãã€ã |
BSONã¯è¿œå ã®ããŒã¿åã®å¯èœæ§ãæäŸããŸãããæãéèŠãªã®ã¯ããŒã¿ãéšåçã«èªã¿åã/å€æŽããæ©èœã§ãããããŒã¿å§çž®ã«é¢ããŠã¯éåžžã«æ®å¿µã§ãããããããã«æ€çŽ¢ãç¶ããå¿ èŠããããŸãã
ã¡ãã»ãŒãžããã¯
次ã®è¡šã¯ãã¡ãã»ãŒãžããã¯ã§ãã ãã®åœ¢åŒã¯æè¿éåžžã«äººæ°ããããç§ã¯ã¿ã©ã³ããŒã«ãéžãã§ãããšãã«å人çã«ãããç¥ããŸããã
ãã©ãŒãããWebãµã€ããèŠããšã次ã®ããšãã§ããŸãã
- ãã®ãã©ãŒãããã¯ãredisãfluentdãªã©ã®è£œåã§ç©æ¥µçã«äœ¿çšãããŠãããèªä¿¡ãæã£ãŠããããšãããããŸãã
- 倧声ã§ç¢æãåç §ããŠãã ãããããã¯JSONã®ãããªãã®ã§ãã ã§ãéããŠå°ãã
ãããã©ã®çšåºŠçå®ãã確èªããå¿ èŠããããŸãããæåã«ããã®åœ¢åŒãæäŸãããã®ãèŠãŠã¿ãŸãããã
äŒçµ±çã«ãé·æããå§ããŸãããïŒ
- 圢åŒã¯JSONãšå®å
šã«äºææ§ããããŸã
ããŒã¿ãMessagePackããJSONã«å€æãããšããããŒã¿ã倱ãããããšã¯ãããŸãããããšãã°ãBSON圢åŒã«ã€ããŠã¯èšããŸããã 確ãã«ãããŸããŸãªããŒã¿åã«ã¯å€ãã®å¶éããããŸãã
- æŽæ°åã®å€ã¯-ïŒ263ïŒãïŒ264ïŒâ1ã«å¶éãããŠããŸãã
- ãã€ããªãªããžã§ã¯ãã®æ倧é·ã¯ïŒ232ïŒ-1ã§ãã
- è¡ã®æ倧ãã€ããµã€ãºïŒ232ïŒâ1ã
- é åå ã®èŠçŽ ã®æ倧æ°ã¯ïŒ232ïŒ-1以äžã§ãã
- é£æ³é åã®èŠçŽ ã®æ倧æ°ã¯ïŒ232ïŒ-1以äžã§ãã
- ããŒã¿ãæºãã¶ãã®ãåŸæã§ãã
ããšãã°ã{"a"ïŒ1ã "b"ïŒ2}ã¯ãJSONã§13ãã€ããBSONã§19ãã€ããMessagePackã§ããã7ãã€ããå ããŠããŸãã
- ãµããŒããããŠããããŒã¿åãæ¡åŒµã§ããŸãã
MsgPackã§ã¯ãç¬èªã®åã·ã¹ãã ãæ¡åŒµã§ããŸãã MsgPackã®åã¯æ°å€ã§ãšã³ã³ãŒãããã-1ã-128ã®å€ã¯åœ¢åŒã«ãã£ãŠäºçŽãããŠããããïŒããã¯åœ¢åŒã®ä»æ§ã«èšèŒãããŠããŸãïŒã0ã127ã®å€ã䜿çšã§ããŸããããŒã¿ã
- èšå€§ãªæ°ã®èšèªã§ãµããŒããããŠããŸãã
- RPCããã±ãŒãžããããŸãïŒãã ããããã¯ç§ãã¡ã«ãšã£ãŠããã»ã©éèŠã§ã¯ãããŸããïŒã
- ã¹ããªãŒãã³ã°APIã䜿çšã§ããŸãã
çæïŒ
- éšåçãªããŒã¿å€æŽã¯ãµããŒãããŠããŸããã
BSON圢åŒãšã¯å¯Ÿç §çã«ãMsgPackãåãã£ãŒã«ãã®ãµã€ãºãä¿åããŠããŠãããã®äžã®ããŒã¿ã®éšåçãªå€æŽã¯å€±æããŸãã JSON {"a"ïŒ1ã "b"ïŒ2}ã®ã·ãªã¢ã«åãããè¡šçŸããããšããŸãã Bsonã¯5ãã€ãã䜿çšã㊠'a'ããŒã®å€ãæ ŒçŽããŸããããã«ãããå€ã1ãã2000ïŒ3ãã€ãããããŸãïŒã«åé¡ãªãå€æŽã§ããŸãã ããããMessagePackã¯ã¹ãã¬ãŒãžã«1ãã€ãã䜿çšãã2000ã¯3ãã€ãã䜿çšããããããbããã©ã¡ãŒã¿ãŒã«é¢ããããŒã¿ãã·ããããã«ããaããã©ã¡ãŒã¿ãŒã®å€ãå€æŽããããšã¯ã§ããŸããã
ããã§ã¯ãã©ãã»ã©çç£çã§ãããŒã¿ãã©ã®ããã«å§çž®ããããèŠãŠã¿ãŸãããã 次ã®ã©ã€ãã©ãªããã¹ãã«äœ¿çšãããŸããã
åŸãããçµæã¯æ¬¡ã®ãšããã§ãã
JSïŒããŒãïŒ | |
---|---|
JSONãšã³ã³ãŒã | 21,507 ops /ç§ïŒ86åã®ãµã³ããªã³ã°ïŒ |
JSONãã³ãŒã | 9,039 ops /ç§ïŒ89åã®å®è¡ããµã³ããªã³ã°ãããŸããïŒ |
ãžã§ã³ãœã³åŸåŸ© | 6.090 ops /ç§ïŒ93åã®ãµã³ãã«å®è¡ïŒ |
JSONå§çž®ãšã³ã³ãŒã | 1,168 ops /ç§ïŒ84åã®å®è¡ããµã³ããªã³ã°ïŒ |
JSONå§çž®ãã³ãŒã | 2,980 ops /ç§ïŒ93åã®å®è¡ãµã³ããªã³ã°ïŒ |
Json CompresåŸåŸ© | 874 ops /ç§ïŒ86åã®ãµã³ãã«å®è¡ïŒ |
Bsonãšã³ã³ãŒã | 93.21 ops /ç§ïŒãµã³ããªã³ã°æ°76åïŒ |
Bsonãã³ãŒã | 242 ops /ç§ïŒ84åã®ãµã³ããªã³ã°ãå®è¡ïŒ |
BsonåŸåŸ© | 65.24 ops /ç§ïŒ65åã®å®è¡ãµã³ããªã³ã°ïŒ |
Msgpackãšã³ã³ãŒã | 4,758 ops /ç§ïŒ79åã®ãµã³ããªã³ã°ããµã³ããªã³ã°ïŒ |
Msgpackãã³ãŒã | 2,632 ops /ç§ïŒãµã³ããªã³ã°91åïŒ |
MsgpackåŸåŸ© | 1,692 ops /ç§ïŒ91åã®å®è¡ãµã³ããªã³ã°ïŒ |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³åŸåŸ© | 5,754 ops /ç§ |
Json CompresåŸåŸ© | 890 ops /ç§ |
BsonåŸåŸ© | 374 ops /ç§ |
MsgpackåŸåŸ© | 1,048 ops /ç§ |
è¡ã | |||||
---|---|---|---|---|---|
JSONãšã³ã³ãŒã | 5000 | 391100 ns / op | 24.37 MB /ç§ | 54520 B / op | 1478 allocs / op |
JSONãã³ãŒã | 3000 | 392785 ns / op | 24.27 MB /ç§ | 76634 B / op | 1430å²ãåœãŠ/ op |
ãžã§ã³ãœã³åŸåŸ© | 2000幎 | 796115 ns / op | 11.97 MB / s | 131150 B / op | 2908 allocs / op |
JSONå§çž®ãšã³ã³ãŒã | 3000 | 422254 ns / op | 0.00 MB /ç§ | 54790 B / op | 1478 allocs / op |
JSONå§çž®ãã³ãŒã | 3000 | 464569 ns / op | 4.50 MB /ç§ | 117206 B / op | 1446 allocs / op |
Json CompresåŸåŸ© | 2000幎 | 881305 ns / op | 0.00 MB /ç§ | 171795 B / op | 2915 allocs / op |
Bsonãšã³ã³ãŒã | 10,000 | 249024 ns / op | 40.42 MB /ç§ | 70085 B / op | 982 allocs / op |
Bsonãã³ãŒã | 3000 | 524408 ns / op | 19.19 MB /ç§ | 124777 B / op | 3580å²ãåœãŠ/ op |
BsonåŸåŸ© | 2000幎 | 712524 ns / op | 14.13 MB / s | 195334 B / op | 4562 allocs / op |
Msgpackãšã³ã³ãŒã | 5000 | 306260 ns / op | 27.36 MB /ç§ | 49907 B / op | 968 allocs / op |
Msgpackãã³ãŒã | 10,000 | 214967 ns / op | 38.98 MB / s | 59649 B / op | 1690å²ãåœãŠ/ op |
MsgpackåŸåŸ© | 3000 | 547434 ns / op | 15.31 MB / s | 109754 B / op | 2658 allocs / op |
ãããŠãããŒã¿ãµã€ãºã«é¢ããŠã¯æ¬¡ã®ããã«ãªããŸããã
JSïŒããŒãïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 112710ãã€ã |
Msgpack | 7628ãã€ã |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 9618ãã€ã |
Msgpack | 7628ãã€ã |
ãã¡ãããMessagePackã¯ç§ãã¡ãæãã»ã©ã¯ãŒã«ã«ããŒã¿ãå§çž®ããŸããããå°ãªããšãJSãšGoã®äž¡æ¹ã§éåžžã«å®å®ããŠåäœããŸãã ããããçŸæç¹ã§ã¯ããããç§ãã¡ã®ä»äºã®æãé åçãªåè£ã§ãããæåŸã®æ£è ãèæ ®ããããšã¯æ®ã£ãŠããŸãã
Cbor
æ£çŽãªãšããããã®åœ¢åŒã¯ãã®æ©èœãMessagePackã«éåžžã«äŒŒãŠããããã®åœ¢åŒã¯MessagePackã®ä»£ãããšããŠéçºãããããã§ãã ãŸããããŒã¿åæ¡åŒµæ©èœã®ãµããŒããšå®å šãªJSONäºææ§ãåããŠããŸãã éãã®äžã§ãç§ã¯ä»»æã®é·ãã®é å/æååã®ãµããŒãã®ã¿ã«æ°ä»ããŸããããç§ã®æèŠã§ã¯ãããã¯éåžžã«å¥åŠãªæ©èœã§ãã ãã®åœ¢åŒã«ã€ããŠè©³ããç¥ãããå Žåã¯ãHabr-habrahabr.ru/ post/208690ã«åªããèšäºããããŸãã ããŠãCborãã©ã®ããã«ããã©ãŒãã³ã¹ãšããŒã¿å§çž®ãåããŠããããèŠãŠãããŸãã
次ã®ã©ã€ãã©ãªããã¹ãã«äœ¿çšãããŸããã
ãããŠããã¡ãããèæ ®ããããã¹ãŠã®åœ¢åŒãèæ ®ããããã¹ãã®æçµçµæã¯æ¬¡ã®ãšããã§ãã
JSïŒããŒãïŒ | |
---|---|
JSONãšã³ã³ãŒã | 21,507 ops /ç§Â±1.01ïŒ ïŒ86åã®ãµã³ããªã³ã°ïŒ |
JSONãã³ãŒã | 9.039 ops /ç§Â±0.90ïŒ ïŒ89åã®ãµã³ããªã³ã°ïŒ |
ãžã§ã³ãœã³åŸåŸ© | 6.090 ops /ç§Â±0.62ïŒ ïŒ93åã®ãµã³ããªã³ã°ïŒ |
JSONå§çž®ãšã³ã³ãŒã | 1,168 ops /ç§Â±1.20ïŒ ïŒãµã³ããªã³ã°84åïŒ |
JSONå§çž®ãã³ãŒã | 2,980 ops /ç§Â±0.43ïŒ ïŒ93åã®ãµã³ããªã³ã°ïŒ |
Json CompresåŸåŸ© | 874 ops /ç§Â±0.91ïŒ ïŒ86åã®ãµã³ããªã³ã°ïŒ |
Bsonãšã³ã³ãŒã | 93.21 ops /ç§Â±0.64ïŒ ïŒãµã³ããªã³ã°åæ°76åïŒ |
Bsonãã³ãŒã | 242 ops / sec±0.63ïŒ ïŒãµã³ããªã³ã°84åïŒ |
BsonåŸåŸ© | 65.24 ops /ç§Â±1.27ïŒ ïŒ65åã®ãµã³ããªã³ã°ïŒ |
Msgpackãšã³ã³ãŒã | 4,758 ops /ç§Â±1.13ïŒ ïŒ79åã®ãµã³ããªã³ã°ïŒ |
Msgpackãã³ãŒã | 2.632 ops /ç§Â±0.90ïŒ ïŒ91åã®å®è¡ãµã³ããªã³ã°ïŒ |
MsgpackåŸåŸ© | 1,692 ops /ç§Â±0.83ïŒ ïŒãµã³ããªã³ã°91åïŒ |
Cborãšã³ã³ãŒã | 1,529 ops /ç§Â±4.13ïŒ ïŒ89åã®ãµã³ããªã³ã°ïŒ |
Cborãã³ãŒã | 1.198 ops /ç§Â±0.97ïŒ ïŒ88åã®ãµã³ããªã³ã°ïŒ |
CboråŸåŸ© | 351 ops /ç§Â±3.28ïŒ ïŒ77åã®å®è¡ãµã³ããªã³ã°ïŒ |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³åŸåŸ© | 5.754 ops /ç§Â±0.63ïŒ |
Json CompresåŸåŸ© | 890 ops /ç§Â±1.72ïŒ |
BsonåŸåŸ© | 374 ops /ç§Â±2.22ïŒ |
MsgpackåŸåŸ© | 1,048 ops /ç§Â±5.40ïŒ |
CboråŸåŸ© | 859 ops /ç§Â±4.19ïŒ |
è¡ã | |||||
---|---|---|---|---|---|
JSONãšã³ã³ãŒã | 5000 | 391100 ns / op | 24.37 MB /ç§ | 54520 B / op | 1478 allocs / op |
JSONãã³ãŒã | 3000 | 392785 ns / op | 24.27 MB /ç§ | 76634 B / op | 1430å²ãåœãŠ/ op |
ãžã§ã³ãœã³åŸåŸ© | 2000幎 | 796115 ns / op | 11.97 MB / s | 131150 B / op | 2908 allocs / op |
JSONå§çž®ãšã³ã³ãŒã | 3000 | 422254 ns / op | 0.00 MB /ç§ | 54790 B / op | 1478 allocs / op |
JSONå§çž®ãã³ãŒã | 3000 | 464569 ns / op | 4.50 MB /ç§ | 117206 B / op | 1446 allocs / op |
Json CompresåŸåŸ© | 2000幎 | 881305 ns / op | 0.00 MB /ç§ | 171795 B / op | 2915 allocs / op |
Bsonãšã³ã³ãŒã | 10,000 | 249024 ns / op | 40.42 MB /ç§ | 70085 B / op | 982 allocs / op |
Bsonãã³ãŒã | 3000 | 524408 ns / op | 19.19 MB /ç§ | 124777 B / op | 3580å²ãåœãŠ/ op |
BsonåŸåŸ© | 2000幎 | 712524 ns / op | 14.13 MB / s | 195334 B / op | 4562 allocs / op |
Msgpackãšã³ã³ãŒã | 5000 | 306260 ns / op | 27.36 MB /ç§ | 49907 B / op | 968 allocs / op |
Msgpackãã³ãŒã | 10,000 | 214967 ns / op | 38.98 MB / s | 59649 B / op | 1690å²ãåœãŠ/ op |
MsgpackåŸåŸ© | 3000 | 547434 ns / op | 15.31 MB / s | 109754 B / op | 2658 allocs / op |
Cborãšã³ã³ãŒã | 20000 | 71203 ns / op | 117.48 MB / s | 32944 B / op | 12å²ãåœãŠ/ op |
Cborãã³ãŒã | 3000 | 432,005 ns / op | 19.36 MB /ç§ | 40216 B / op | 2159 allocs / op |
CboråŸåŸ© | 3000 | 531434 ns / op | 15.74 MB / s | 73160 B / op | 2171 allocs / op |
ãããŠãããŒã¿ãµã€ãºã«é¢ããŠã¯æ¬¡ã®ããã«ãªããŸããã
JSïŒããŒãïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 112710ãã€ã |
Msgpack | 7628ãã€ã |
Cbor | 7617ãã€ã |
JSïŒãã©ãŠã¶ïŒ | |
---|---|
ãžã§ã³ãœã³ | 9482ãã€ã |
å§çž®ãããJSON | 1872ãã€ã |
ããœã³ | 9618ãã€ã |
Msgpack | 7628ãã€ã |
Cbor | 7617ãã€ã |
ã³ã¡ã³ãã¯ãããã§ã¯åé·ã§ãããçµæãããã¹ãŠãã¯ã£ãããšèŠãããšæããŸã-CBorã¯æãé ã圢åŒã§ããããšãå€æããŸããã
çµè«
ãã®æ¯èŒããã©ã®ãããªçµè«ãå°ãåºããŸãããïŒ å°ãèããŠçµæãèŠãŠã¿ããšãã©ã®åœ¢åŒã«ãæºè¶³ããŠããªããšããçµè«ã«éããŸããã ã¯ããMsgPackã¯éåžžã«åªãããªãã·ã§ã³ã§ããããšãããããŸããïŒäœ¿ããããéåžžã«å®å®ããŠããŸãããååãšçžè«ããåŸãJSONã«åºã¥ããŠããªãä»ã®ãã€ããªããŒã¿åœ¢åŒïŒProtobufãFlatBuffersãCap'n protoãavroïŒãæ°ãã«èŠãããšã«ããŸããã 次ã®èšäºã§ã¯ãäœãããããæçµçã«äœãéžãã ãã«ã€ããŠèª¬æããŸãã
æçš¿è ïŒRoman Efremenko KyKyPy3uK