golang - serialization benchmarks (2018년 8월)

출처: https://github.com/alecthomas/go_serialization_benchmarks

2018-08-19 Results with Go 1.10 on a 2.5 GHz Intel Core i7 MacBook Pro (Retina, 15-inch, Mid 2015):

benchmark                                      iter    time/iter   bytes/op     allocs/op  tt.time   tt.bytes       time/alloc
---------                                      ----    ---------   --------     ---------  -------   --------       ----------
BenchmarkGotinyMarshal-8                   10000000    132 ns/op     0 B/op   0 allocs/op   1.32 s       0 KB    0.00 ns/alloc
BenchmarkGotinyUnmarshal-8                 10000000    216 ns/op   112 B/op   3 allocs/op   2.16 s  112000 KB   72.00 ns/alloc
BenchmarkGotinyNoTimeMarshal-8             10000000    124 ns/op     0 B/op   0 allocs/op   1.24 s       0 KB    0.00 ns/alloc
BenchmarkGotinyNoTimeUnmarshal-8           10000000    203 ns/op    96 B/op   3 allocs/op   2.03 s   96000 KB   67.67 ns/alloc
BenchmarkMsgpMarshal-8                     10000000    171 ns/op   128 B/op   1 allocs/op   1.71 s  128000 KB  171.00 ns/alloc
BenchmarkMsgpUnmarshal-8                    5000000    326 ns/op   112 B/op   3 allocs/op   1.63 s   56000 KB  108.67 ns/alloc
BenchmarkVmihailencoMsgpackMarshal-8        1000000   1706 ns/op   368 B/op   6 allocs/op   1.71 s   36800 KB  284.33 ns/alloc
BenchmarkVmihailencoMsgpackUnmarshal-8      1000000   1863 ns/op   384 B/op  13 allocs/op   1.86 s   38400 KB  143.31 ns/alloc
BenchmarkJsonMarshal-8                      1000000   2165 ns/op   528 B/op   5 allocs/op   2.17 s   52800 KB  433.00 ns/alloc
BenchmarkJsonUnmarshal-8                     300000   4134 ns/op   495 B/op   8 allocs/op   1.24 s   14850 KB  516.75 ns/alloc
BenchmarkJsonIterMarshal-8                  1000000   1259 ns/op   200 B/op   3 allocs/op   1.26 s   20000 KB  419.67 ns/alloc
BenchmarkJsonIterUnmarshal-8                1000000   1518 ns/op   248 B/op   7 allocs/op   1.52 s   24800 KB  216.86 ns/alloc
BenchmarkEasyJsonMarshal-8                  1000000   1304 ns/op   784 B/op   5 allocs/op   1.30 s   78400 KB  260.80 ns/alloc
BenchmarkEasyJsonUnmarshal-8                1000000   1411 ns/op   160 B/op   4 allocs/op   1.41 s   16000 KB  352.75 ns/alloc
BenchmarkBsonMarshal-8                      1000000   1373 ns/op   392 B/op  10 allocs/op   1.37 s   39200 KB  137.30 ns/alloc
BenchmarkBsonUnmarshal-8                    1000000   1838 ns/op   244 B/op  19 allocs/op   1.84 s   24400 KB   96.74 ns/alloc
BenchmarkGobMarshal-8                       2000000    942 ns/op    48 B/op   2 allocs/op   1.88 s    9600 KB  471.00 ns/alloc
BenchmarkGobUnmarshal-8                     2000000    945 ns/op   112 B/op   3 allocs/op   1.89 s   22400 KB  315.00 ns/alloc
BenchmarkXdrMarshal-8                       1000000   1660 ns/op   456 B/op  21 allocs/op   1.66 s   45600 KB   79.05 ns/alloc
BenchmarkXdrUnmarshal-8                     1000000   1451 ns/op   240 B/op  11 allocs/op   1.45 s   24000 KB  131.91 ns/alloc
BenchmarkUgorjiCodecMsgpackMarshal-8        1000000   1072 ns/op   545 B/op   6 allocs/op   1.07 s   54500 KB  178.67 ns/alloc
BenchmarkUgorjiCodecMsgpackUnmarshal-8      1000000   1276 ns/op   465 B/op   6 allocs/op   1.28 s   46500 KB  212.67 ns/alloc
BenchmarkUgorjiCodecBincMarshal-8           1000000   1154 ns/op   577 B/op   7 allocs/op   1.15 s   57700 KB  164.86 ns/alloc
BenchmarkUgorjiCodecBincUnmarshal-8         1000000   1449 ns/op   689 B/op   9 allocs/op   1.45 s   68900 KB  161.00 ns/alloc
BenchmarkSerealMarshal-8                     500000   2544 ns/op   912 B/op  21 allocs/op   1.27 s   45600 KB  121.14 ns/alloc
BenchmarkSerealUnmarshal-8                   500000   2776 ns/op  1008 B/op  34 allocs/op   1.39 s   50400 KB   81.65 ns/alloc
BenchmarkBinaryMarshal-8                    1000000   1403 ns/op   334 B/op  20 allocs/op   1.40 s   33400 KB   70.15 ns/alloc
BenchmarkBinaryUnmarshal-8                  1000000   1507 ns/op   335 B/op  22 allocs/op   1.51 s   33500 KB   68.50 ns/alloc
BenchmarkFlatBuffersMarshal-8               5000000    319 ns/op     0 B/op   0 allocs/op   1.59 s       0 KB    0.00 ns/alloc
BenchmarkFlatBuffersUnmarshal-8             5000000    248 ns/op   112 B/op   3 allocs/op   1.24 s   56000 KB   82.67 ns/alloc
BenchmarkCapNProtoMarshal-8                 3000000    475 ns/op    56 B/op   2 allocs/op   1.43 s   16800 KB  237.50 ns/alloc
BenchmarkCapNProtoUnmarshal-8               3000000    413 ns/op   200 B/op   6 allocs/op   1.24 s   60000 KB   68.83 ns/alloc
BenchmarkCapNProto2Marshal-8                2000000    696 ns/op   244 B/op   3 allocs/op   1.39 s   48800 KB  232.00 ns/alloc
BenchmarkCapNProto2Unmarshal-8              2000000   1016 ns/op   320 B/op   6 allocs/op   2.03 s   64000 KB  169.33 ns/alloc
BenchmarkHproseMarshal-8                    2000000    897 ns/op   473 B/op   8 allocs/op   1.79 s   94600 KB  112.12 ns/alloc
BenchmarkHproseUnmarshal-8                  1000000   1083 ns/op   320 B/op  10 allocs/op   1.08 s   32000 KB  108.30 ns/alloc
BenchmarkHprose2Marshal-8                   2000000    664 ns/op     0 B/op   0 allocs/op   1.33 s       0 KB    0.00 ns/alloc
BenchmarkHprose2Unmarshal-8                 3000000    536 ns/op   144 B/op   4 allocs/op   1.61 s   43200 KB  134.00 ns/alloc
BenchmarkProtobufMarshal-8                  2000000    954 ns/op   200 B/op   7 allocs/op   1.91 s   40000 KB  136.29 ns/alloc
BenchmarkProtobufUnmarshal-8                2000000    835 ns/op   192 B/op  10 allocs/op   1.67 s   38400 KB   83.50 ns/alloc
BenchmarkGoprotobufMarshal-8                3000000    411 ns/op    96 B/op   2 allocs/op   1.23 s   28800 KB  205.50 ns/alloc
BenchmarkGoprotobufUnmarshal-8              2000000    624 ns/op   200 B/op  10 allocs/op   1.25 s   40000 KB   62.40 ns/alloc
BenchmarkGogoprotobufMarshal-8             10000000    153 ns/op    64 B/op   1 allocs/op   1.53 s   64000 KB  153.00 ns/alloc
BenchmarkGogoprotobufUnmarshal-8           10000000    225 ns/op    96 B/op   3 allocs/op   2.25 s   96000 KB   75.00 ns/alloc
BenchmarkColferMarshal-8                   10000000    129 ns/op    64 B/op   1 allocs/op   1.29 s   64000 KB  129.00 ns/alloc
BenchmarkColferUnmarshal-8                 10000000    178 ns/op   112 B/op   3 allocs/op   1.78 s  112000 KB   59.33 ns/alloc
BenchmarkGencodeMarshal-8                  10000000    168 ns/op    80 B/op   2 allocs/op   1.68 s   80000 KB   84.00 ns/alloc
BenchmarkGencodeUnmarshal-8                10000000    181 ns/op   112 B/op   3 allocs/op   1.81 s  112000 KB   60.33 ns/alloc
BenchmarkGencodeUnsafeMarshal-8            20000000    105 ns/op    48 B/op   1 allocs/op   2.10 s   96000 KB  105.00 ns/alloc
BenchmarkGencodeUnsafeUnmarshal-8          10000000    140 ns/op    96 B/op   3 allocs/op   1.40 s   96000 KB   46.67 ns/alloc
BenchmarkXDR2Marshal-8                     10000000    159 ns/op    64 B/op   1 allocs/op   1.59 s   64000 KB  159.00 ns/alloc
BenchmarkXDR2Unmarshal-8                   10000000    140 ns/op    32 B/op   2 allocs/op   1.40 s   32000 KB   70.00 ns/alloc
BenchmarkGoAvroMarshal-8                     500000   2419 ns/op  1030 B/op  31 allocs/op   1.21 s   51500 KB   78.03 ns/alloc
BenchmarkGoAvroUnmarshal-8                   200000   5810 ns/op  3436 B/op  87 allocs/op   1.16 s   68720 KB   66.78 ns/alloc
BenchmarkGoAvro2TextMarshal-8                500000   2740 ns/op  1326 B/op  20 allocs/op   1.37 s   66300 KB  137.00 ns/alloc
BenchmarkGoAvro2TextUnmarshal-8              500000   2650 ns/op   807 B/op  34 allocs/op   1.32 s   40350 KB   77.94 ns/alloc
BenchmarkGoAvro2BinaryMarshal-8             2000000    859 ns/op   510 B/op  11 allocs/op   1.72 s  102000 KB   78.09 ns/alloc
BenchmarkGoAvro2BinaryUnmarshal-8           2000000    914 ns/op   576 B/op  13 allocs/op   1.83 s  115200 KB   70.31 ns/alloc
BenchmarkIkeaMarshal-8                      2000000    614 ns/op    72 B/op   8 allocs/op   1.23 s   14400 KB   76.75 ns/alloc
BenchmarkIkeaUnmarshal-8                    2000000    782 ns/op   160 B/op  11 allocs/op   1.56 s   32000 KB   71.09 ns/alloc
---
totals:
BenchmarkGencodeUnsafe-8                   30000000    245 ns/op   144 B/op   4 allocs/op   7.35 s  432000 KB   61.25 ns/alloc
BenchmarkXDR2-8                            20000000    299 ns/op    96 B/op   3 allocs/op   5.98 s  192000 KB   99.67 ns/alloc
BenchmarkColfer-8                          20000000    307 ns/op   176 B/op   4 allocs/op   6.14 s  352000 KB   76.75 ns/alloc
BenchmarkGotinyNoTime-8                    20000000    327 ns/op    96 B/op   3 allocs/op   6.54 s  192000 KB  109.00 ns/alloc
BenchmarkGotiny-8                          20000000    348 ns/op   112 B/op   3 allocs/op   6.96 s  224000 KB  116.00 ns/alloc
BenchmarkGencode-8                         20000000    349 ns/op   192 B/op   5 allocs/op   6.98 s  384000 KB   69.80 ns/alloc
BenchmarkGogoprotobuf-8                    20000000    378 ns/op   160 B/op   4 allocs/op   7.56 s  320000 KB   94.50 ns/alloc
BenchmarkMsgp-8                            15000000    497 ns/op   240 B/op   4 allocs/op   7.46 s  360000 KB  124.25 ns/alloc
BenchmarkFlatBuffers-8                     10000000    567 ns/op   112 B/op   3 allocs/op   5.67 s  112000 KB  189.00 ns/alloc
BenchmarkCapNProto-8                        6000000    888 ns/op   256 B/op   8 allocs/op   5.33 s  153600 KB  111.00 ns/alloc
BenchmarkGoprotobuf-8                       5000000   1035 ns/op   296 B/op  12 allocs/op   5.17 s  148000 KB   86.25 ns/alloc
BenchmarkHprose2-8                          5000000   1200 ns/op   144 B/op   4 allocs/op   6.00 s   72000 KB  300.00 ns/alloc
BenchmarkIkea-8                             4000000   1396 ns/op   232 B/op  19 allocs/op   5.58 s   92800 KB   73.47 ns/alloc
BenchmarkCapNProto2-8                       4000000   1712 ns/op   564 B/op   9 allocs/op   6.85 s  225600 KB  190.22 ns/alloc
BenchmarkGoAvro2Binary-8                    4000000   1773 ns/op  1086 B/op  24 allocs/op   7.09 s  434400 KB   73.88 ns/alloc
BenchmarkProtobuf-8                         4000000   1789 ns/op   392 B/op  17 allocs/op   7.16 s  156800 KB  105.24 ns/alloc
BenchmarkGob-8                              4000000   1887 ns/op   160 B/op   5 allocs/op   7.55 s   64000 KB  377.40 ns/alloc
BenchmarkHprose-8                           3000000   1980 ns/op   793 B/op  18 allocs/op   5.94 s  237900 KB  110.00 ns/alloc
BenchmarkUgorjiCodecMsgpack-8               2000000   2348 ns/op  1010 B/op  12 allocs/op   4.70 s  202000 KB  195.67 ns/alloc
BenchmarkUgorjiCodecBinc-8                  2000000   2603 ns/op  1266 B/op  16 allocs/op   5.21 s  253200 KB  162.69 ns/alloc
BenchmarkEasyJson-8                         2000000   2715 ns/op   944 B/op   9 allocs/op   5.43 s  188800 KB  301.67 ns/alloc
BenchmarkJsonIter-8                         2000000   2777 ns/op   448 B/op  10 allocs/op   5.55 s   89600 KB  277.70 ns/alloc
BenchmarkBinary-8                           2000000   2910 ns/op   669 B/op  42 allocs/op   5.82 s  133800 KB   69.29 ns/alloc
BenchmarkXdr-8                              2000000   3111 ns/op   696 B/op  32 allocs/op   6.22 s  139200 KB   97.22 ns/alloc
BenchmarkBson-8                             2000000   3211 ns/op   636 B/op  29 allocs/op   6.42 s  127200 KB  110.72 ns/alloc
BenchmarkVmihailencoMsgpack-8               2000000   3569 ns/op   752 B/op  19 allocs/op   7.14 s  150400 KB  187.84 ns/alloc
BenchmarkSereal-8                           1000000   5320 ns/op  1920 B/op  55 allocs/op   5.32 s  192000 KB   96.73 ns/alloc
BenchmarkGoAvro2Text-8                      1000000   5390 ns/op  2133 B/op  54 allocs/op   5.39 s  213300 KB   99.81 ns/alloc
BenchmarkJson-8                             1300000   6299 ns/op  1023 B/op  13 allocs/op   8.19 s  132990 KB  484.54 ns/alloc
BenchmarkGoAvro-8                            700000   8229 ns/op  4466 B/op 118 allocs/op   5.76 s  312620 KB   69.74 ns/alloc

gob는 VmihailencoMsgpack와 UgorjiCodecMsgpack 보다 빠름.
Go 이외의 언어와의 상호 호환성이 필요 없다면 gob의 선택도 좋을 듯.


이 글은 2018-10-16에 작성되었습니다.