/play-with-geometry-serde

Benchmark various geometry serdes and roll my own faster serdes

Primary LanguageJavaApache License 2.0Apache-2.0

play-with-geometry-serde

Benchmark various geometry serdes and roll my own faster serdes

Introduction

This project contains my fast geometry serdes and improvements on existing serdes of Apache Sedona. It also contains benchmarking code based on JMH to evaluate the performance of these geometry serdes.

Run the benchmark

./gradlew jmh

Benchmark results

This is the result of benchmark on a laptop with a 2 GHz 4 Cores Intel Core i5 CPU and 16GB of RAM, using OpenJDK version 1.8.0_352. We are submitting a paper to VLDB (Very Large Data Bases) titled "GeoLake: Bringing Geospatial Support to Lakehouses" and also referencing this experimental result.

serde

We also run tests on Intel(R) Xeon(R) Platinum 8269CY CPU @ 2.50GHz, also using OpenJDK version 1.8.0_352, below is the result.

Benchmark                                                   (segments)   Mode  Cnt         Score         Error  Units
BenchmarkFastSerdeByteBuffer.deserializeGeometryCollection           4  thrpt   15    642244.802 ±   55606.087  ops/s
BenchmarkFastSerdeByteBuffer.deserializeGeometryCollection          16  thrpt   15    327651.115 ±   13425.805  ops/s
BenchmarkFastSerdeByteBuffer.deserializeGeometryCollection          48  thrpt   15    152240.471 ±    3708.534  ops/s
BenchmarkFastSerdeByteBuffer.deserializeLineString                   4  thrpt   15   7619342.248 ±  159438.419  ops/s
BenchmarkFastSerdeByteBuffer.deserializeLineString                  16  thrpt   15   3348759.360 ±   68629.560  ops/s
BenchmarkFastSerdeByteBuffer.deserializeLineString                  48  thrpt   15   1323189.989 ±   44433.149  ops/s
BenchmarkFastSerdeByteBuffer.deserializeMultiPolygon                 4  thrpt   15   1807142.222 ±   19168.172  ops/s
BenchmarkFastSerdeByteBuffer.deserializeMultiPolygon                16  thrpt   15    929568.476 ±   18815.594  ops/s
BenchmarkFastSerdeByteBuffer.deserializeMultiPolygon                48  thrpt   15    413410.227 ±    9779.555  ops/s
BenchmarkFastSerdeByteBuffer.deserializePoint                        4  thrpt   15  14386784.055 ±  478731.614  ops/s
BenchmarkFastSerdeByteBuffer.deserializePoint                       16  thrpt   15  14096043.868 ±  492350.798  ops/s
BenchmarkFastSerdeByteBuffer.deserializePoint                       48  thrpt   15  14349222.558 ±  372900.627  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygon                      4  thrpt   15   4682744.577 ±  175727.018  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygon                     16  thrpt   15   2619038.522 ±   44135.861  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygon                     48  thrpt   15   1187438.610 ±   23842.151  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygonWithHoles             4  thrpt   15   2272550.627 ±  105104.592  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygonWithHoles            16  thrpt   15   1025958.231 ±   25597.851  ops/s
BenchmarkFastSerdeByteBuffer.deserializePolygonWithHoles            48  thrpt   15    434660.644 ±    5405.761  ops/s
BenchmarkFastSerdeByteBuffer.serializeGeometryCollection             4  thrpt   15    832668.993 ±   21053.875  ops/s
BenchmarkFastSerdeByteBuffer.serializeGeometryCollection            16  thrpt   15    325541.627 ±    2688.323  ops/s
BenchmarkFastSerdeByteBuffer.serializeGeometryCollection            48  thrpt   15    117884.223 ±    2871.101  ops/s
BenchmarkFastSerdeByteBuffer.serializeLineString                     4  thrpt   15   9023206.051 ±  153237.296  ops/s
BenchmarkFastSerdeByteBuffer.serializeLineString                    16  thrpt   15   3831718.879 ±   69404.242  ops/s
BenchmarkFastSerdeByteBuffer.serializeLineString                    48  thrpt   15   1410238.680 ±   22831.215  ops/s
BenchmarkFastSerdeByteBuffer.serializeMultiPolygon                   4  thrpt   15   2411105.190 ±  334051.294  ops/s
BenchmarkFastSerdeByteBuffer.serializeMultiPolygon                  16  thrpt   15   1139672.223 ±   92727.315  ops/s
BenchmarkFastSerdeByteBuffer.serializeMultiPolygon                  48  thrpt   15    387681.030 ±    1985.450  ops/s
BenchmarkFastSerdeByteBuffer.serializePoint                          4  thrpt   15  22828196.512 ±  337431.094  ops/s
BenchmarkFastSerdeByteBuffer.serializePoint                         16  thrpt   15  23046575.468 ±  414632.743  ops/s
BenchmarkFastSerdeByteBuffer.serializePoint                         48  thrpt   15  23145047.511 ±  254545.531  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygon                        4  thrpt   15   6432291.798 ±  705161.114  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygon                       16  thrpt   15   3495362.658 ±   36100.156  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygon                       48  thrpt   15   1327410.819 ±   39308.076  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygonWithHoles               4  thrpt   15   2904124.675 ±  286373.425  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygonWithHoles              16  thrpt   15   1170101.951 ±   75291.612  ops/s
BenchmarkFastSerdeByteBuffer.serializePolygonWithHoles              48  thrpt   15    384409.287 ±    5870.234  ops/s
BenchmarkFastSerdeUnsafe.deserializeGeometryCollection               4  thrpt   15   1126273.409 ±   54025.457  ops/s
BenchmarkFastSerdeUnsafe.deserializeGeometryCollection              16  thrpt   15    642905.819 ±    7880.063  ops/s
BenchmarkFastSerdeUnsafe.deserializeGeometryCollection              48  thrpt   15    292582.019 ±    1687.230  ops/s
BenchmarkFastSerdeUnsafe.deserializeLineString                       4  thrpt   15  14506954.399 ±  231414.160  ops/s
BenchmarkFastSerdeUnsafe.deserializeLineString                      16  thrpt   15   6534348.141 ±   76054.278  ops/s
BenchmarkFastSerdeUnsafe.deserializeLineString                      48  thrpt   15   2525212.502 ±   30645.309  ops/s
BenchmarkFastSerdeUnsafe.deserializeMultiPolygon                     4  thrpt   15   2873988.639 ±   47452.885  ops/s
BenchmarkFastSerdeUnsafe.deserializeMultiPolygon                    16  thrpt   15   1745030.864 ±   26325.497  ops/s
BenchmarkFastSerdeUnsafe.deserializeMultiPolygon                    48  thrpt   15    776228.079 ±    7457.598  ops/s
BenchmarkFastSerdeUnsafe.deserializePoint                            4  thrpt   15  31114572.061 ±  280394.252  ops/s
BenchmarkFastSerdeUnsafe.deserializePoint                           16  thrpt   15  30954239.676 ±  353035.749  ops/s
BenchmarkFastSerdeUnsafe.deserializePoint                           48  thrpt   15  30875892.558 ±  302805.472  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygon                          4  thrpt   15   7538411.691 ±  239165.818  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygon                         16  thrpt   15   4819644.920 ±   92856.800  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygon                         48  thrpt   15   2303730.400 ±   37655.786  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygonWithHoles                 4  thrpt   15   3963831.993 ±  117553.823  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygonWithHoles                16  thrpt   15   2001106.006 ±   34005.045  ops/s
BenchmarkFastSerdeUnsafe.deserializePolygonWithHoles                48  thrpt   15    830466.380 ±    6974.465  ops/s
BenchmarkFastSerdeUnsafe.serializeGeometryCollection                 4  thrpt   15   1594993.754 ±   22568.358  ops/s
BenchmarkFastSerdeUnsafe.serializeGeometryCollection                16  thrpt   15    755572.689 ±    6204.130  ops/s
BenchmarkFastSerdeUnsafe.serializeGeometryCollection                48  thrpt   15    263516.443 ±    1908.490  ops/s
BenchmarkFastSerdeUnsafe.serializeLineString                         4  thrpt   15  21939214.842 ±  302800.196  ops/s
BenchmarkFastSerdeUnsafe.serializeLineString                        16  thrpt   15  14747984.340 ±  166939.553  ops/s
BenchmarkFastSerdeUnsafe.serializeLineString                        48  thrpt   15   5714560.930 ±  118377.245  ops/s
BenchmarkFastSerdeUnsafe.serializeMultiPolygon                       4  thrpt   15   8297583.665 ±  147210.321  ops/s
BenchmarkFastSerdeUnsafe.serializeMultiPolygon                      16  thrpt   15   4278590.066 ±   53773.332  ops/s
BenchmarkFastSerdeUnsafe.serializeMultiPolygon                      48  thrpt   15   1188540.063 ±   16257.002  ops/s
BenchmarkFastSerdeUnsafe.serializePoint                              4  thrpt   15  42841204.928 ±  889415.736  ops/s
BenchmarkFastSerdeUnsafe.serializePoint                             16  thrpt   15  42858398.176 ± 1008649.489  ops/s
BenchmarkFastSerdeUnsafe.serializePoint                             48  thrpt   15  41736805.044 ± 2253494.123  ops/s
BenchmarkFastSerdeUnsafe.serializePolygon                            4  thrpt   15  18726231.596 ±  704750.707  ops/s
BenchmarkFastSerdeUnsafe.serializePolygon                           16  thrpt   15  12912484.185 ±  261413.936  ops/s
BenchmarkFastSerdeUnsafe.serializePolygon                           48  thrpt   15   5280011.921 ±   77073.129  ops/s
BenchmarkFastSerdeUnsafe.serializePolygonWithHoles                   4  thrpt   15   9608791.974 ±  263830.350  ops/s
BenchmarkFastSerdeUnsafe.serializePolygonWithHoles                  16  thrpt   15   4446354.678 ±   71791.716  ops/s
BenchmarkFastSerdeUnsafe.serializePolygonWithHoles                  48  thrpt   15   1192289.171 ±   10573.195  ops/s
BenchmarkKryoSerde.deserializeGeometryCollection                     4  thrpt   15    354445.377 ±   14622.359  ops/s
BenchmarkKryoSerde.deserializeGeometryCollection                    16  thrpt   15    169545.410 ±    5863.446  ops/s
BenchmarkKryoSerde.deserializeGeometryCollection                    48  thrpt   15     66034.971 ±    2120.066  ops/s
BenchmarkKryoSerde.deserializeLineString                             4  thrpt   15   2224703.602 ±   51105.738  ops/s
BenchmarkKryoSerde.deserializeLineString                            16  thrpt   15   1405624.849 ±   30001.174  ops/s
BenchmarkKryoSerde.deserializeLineString                            48  thrpt   15    578957.828 ±    9130.633  ops/s
BenchmarkKryoSerde.deserializeMultiPolygon                           4  thrpt   15    987693.967 ±  108551.105  ops/s
BenchmarkKryoSerde.deserializeMultiPolygon                          16  thrpt   15    445317.627 ±    8713.265  ops/s
BenchmarkKryoSerde.deserializeMultiPolygon                          48  thrpt   15    186650.407 ±    1749.210  ops/s
BenchmarkKryoSerde.deserializePoint                                  4  thrpt   15   8167567.940 ±  251258.109  ops/s
BenchmarkKryoSerde.deserializePoint                                 16  thrpt   15   8119848.858 ±  233384.834  ops/s
BenchmarkKryoSerde.deserializePoint                                 48  thrpt   15   8256649.377 ±  108169.874  ops/s
BenchmarkKryoSerde.deserializePolygon                                4  thrpt   15   2554226.552 ±  436372.014  ops/s
BenchmarkKryoSerde.deserializePolygon                               16  thrpt   15   1220407.061 ±   25458.489  ops/s
BenchmarkKryoSerde.deserializePolygon                               48  thrpt   15    533484.242 ±    9679.244  ops/s
BenchmarkKryoSerde.deserializePolygonWithHoles                       4  thrpt   15   1009052.465 ±   86316.123  ops/s
BenchmarkKryoSerde.deserializePolygonWithHoles                      16  thrpt   15    459968.220 ±   11585.467  ops/s
BenchmarkKryoSerde.deserializePolygonWithHoles                      48  thrpt   15    179563.096 ±    4957.630  ops/s
BenchmarkKryoSerde.serializeGeometryCollection                       4  thrpt   15    748814.793 ±    8134.019  ops/s
BenchmarkKryoSerde.serializeGeometryCollection                      16  thrpt   15    242691.085 ±    3408.893  ops/s
BenchmarkKryoSerde.serializeGeometryCollection                      48  thrpt   15     83266.304 ±     936.087  ops/s
BenchmarkKryoSerde.serializeLineString                               4  thrpt   15   5894930.311 ±   61319.848  ops/s
BenchmarkKryoSerde.serializeLineString                              16  thrpt   15   2122639.206 ±   83290.277  ops/s
BenchmarkKryoSerde.serializeLineString                              48  thrpt   15    736711.776 ±   11655.516  ops/s
BenchmarkKryoSerde.serializeMultiPolygon                             4  thrpt   15   2042188.625 ±   68301.307  ops/s
BenchmarkKryoSerde.serializeMultiPolygon                            16  thrpt   15    678090.693 ±   12838.073  ops/s
BenchmarkKryoSerde.serializeMultiPolygon                            48  thrpt   15    217840.544 ±    2835.673  ops/s
BenchmarkKryoSerde.serializePoint                                    4  thrpt   15   7487008.538 ±  113628.606  ops/s
BenchmarkKryoSerde.serializePoint                                   16  thrpt   15   7317517.739 ±  184742.791  ops/s
BenchmarkKryoSerde.serializePoint                                   48  thrpt   15   9767972.052 ± 4211282.481  ops/s
BenchmarkKryoSerde.serializePolygon                                  4  thrpt   15   4997706.963 ±  175284.900  ops/s
BenchmarkKryoSerde.serializePolygon                                 16  thrpt   15   1898181.525 ±   81095.986  ops/s
BenchmarkKryoSerde.serializePolygon                                 48  thrpt   15    703667.246 ±   17439.562  ops/s
BenchmarkKryoSerde.serializePolygonWithHoles                         4  thrpt   15   2023714.160 ±  178733.842  ops/s
BenchmarkKryoSerde.serializePolygonWithHoles                        16  thrpt   15    676404.105 ±   26761.847  ops/s
BenchmarkKryoSerde.serializePolygonWithHoles                        48  thrpt   15    220177.728 ±    3242.263  ops/s
BenchmarkKryoSerdeOptimized.deserializeGeometryCollection            4  thrpt   15    463527.170 ±   10524.330  ops/s
BenchmarkKryoSerdeOptimized.deserializeGeometryCollection           16  thrpt   15    274938.580 ±    3063.765  ops/s
BenchmarkKryoSerdeOptimized.deserializeGeometryCollection           48  thrpt   15    114169.801 ±    1192.365  ops/s
BenchmarkKryoSerdeOptimized.deserializeLineString                    4  thrpt   15   3126242.022 ±   36414.130  ops/s
BenchmarkKryoSerdeOptimized.deserializeLineString                   16  thrpt   15   1766779.091 ±  205929.889  ops/s
BenchmarkKryoSerdeOptimized.deserializeLineString                   48  thrpt   15    717260.145 ±  125001.164  ops/s
BenchmarkKryoSerdeOptimized.deserializeMultiPolygon                  4  thrpt   15   1218377.048 ±  160483.886  ops/s
BenchmarkKryoSerdeOptimized.deserializeMultiPolygon                 16  thrpt   15    637855.796 ±   22901.547  ops/s
BenchmarkKryoSerdeOptimized.deserializeMultiPolygon                 48  thrpt   15    293677.307 ±   20208.932  ops/s
BenchmarkKryoSerdeOptimized.deserializePoint                         4  thrpt   15  10128393.591 ±  210841.862  ops/s
BenchmarkKryoSerdeOptimized.deserializePoint                        16  thrpt   15  10176316.404 ±  149808.603  ops/s
BenchmarkKryoSerdeOptimized.deserializePoint                        48  thrpt   15   9546734.108 ±  940905.531  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygon                       4  thrpt   15   3085343.484 ±  715911.346  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygon                      16  thrpt   15   1652456.236 ±   13790.619  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygon                      48  thrpt   15    799914.975 ±   15245.305  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygonWithHoles              4  thrpt   15   1141813.514 ±   11040.376  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygonWithHoles             16  thrpt   15    648139.598 ±   17517.785  ops/s
BenchmarkKryoSerdeOptimized.deserializePolygonWithHoles             48  thrpt   15    297328.126 ±   18905.457  ops/s
BenchmarkKryoSerdeOptimized.serializeGeometryCollection              4  thrpt   15   1051614.085 ±   19590.858  ops/s
BenchmarkKryoSerdeOptimized.serializeGeometryCollection             16  thrpt   15    357189.316 ±    3725.613  ops/s
BenchmarkKryoSerdeOptimized.serializeGeometryCollection             48  thrpt   15    119775.402 ±    1586.958  ops/s
BenchmarkKryoSerdeOptimized.serializeLineString                      4  thrpt   15   6252081.969 ± 1415189.811  ops/s
BenchmarkKryoSerdeOptimized.serializeLineString                     16  thrpt   15   3403750.990 ±   67367.253  ops/s
BenchmarkKryoSerdeOptimized.serializeLineString                     48  thrpt   15   1188482.131 ±   10488.344  ops/s
BenchmarkKryoSerdeOptimized.serializeMultiPolygon                    4  thrpt   15   2961112.229 ±   42224.305  ops/s
BenchmarkKryoSerdeOptimized.serializeMultiPolygon                   16  thrpt   15    827620.426 ±  180365.455  ops/s
BenchmarkKryoSerdeOptimized.serializeMultiPolygon                   48  thrpt   15    308166.026 ±    1834.340  ops/s
BenchmarkKryoSerdeOptimized.serializePoint                           4  thrpt   15   7295278.091 ±  148800.729  ops/s
BenchmarkKryoSerdeOptimized.serializePoint                          16  thrpt   15  10148793.687 ± 4224285.338  ops/s
BenchmarkKryoSerdeOptimized.serializePoint                          48  thrpt   15   7363293.012 ±   57913.278  ops/s
BenchmarkKryoSerdeOptimized.serializePolygon                         4  thrpt   15   6325073.041 ± 1406609.516  ops/s
BenchmarkKryoSerdeOptimized.serializePolygon                        16  thrpt   15   3518513.463 ±   25507.035  ops/s
BenchmarkKryoSerdeOptimized.serializePolygon                        48  thrpt   15    914585.207 ±  217954.638  ops/s
BenchmarkKryoSerdeOptimized.serializePolygonWithHoles                4  thrpt   15   2710099.416 ±  603793.260  ops/s
BenchmarkKryoSerdeOptimized.serializePolygonWithHoles               16  thrpt   15    812717.728 ±  197509.900  ops/s
BenchmarkKryoSerdeOptimized.serializePolygonWithHoles               48  thrpt   15    235939.495 ±    1301.897  ops/s
BenchmarkShapeSerde.deserializeLineString                            4  thrpt   15   5812062.580 ±  172017.374  ops/s
BenchmarkShapeSerde.deserializeLineString                           16  thrpt   15    892605.499 ±   21753.041  ops/s
BenchmarkShapeSerde.deserializeLineString                           48  thrpt   15   1163714.542 ±   15793.114  ops/s
BenchmarkShapeSerde.deserializeMultiPolygon                          4  thrpt   15   1857349.371 ±   30874.805  ops/s
BenchmarkShapeSerde.deserializeMultiPolygon                         16  thrpt   15    926308.256 ±   10697.321  ops/s
BenchmarkShapeSerde.deserializeMultiPolygon                         48  thrpt   15    371114.371 ±    3340.007  ops/s
BenchmarkShapeSerde.deserializePoint                                 4  thrpt   15  12405208.362 ±  274040.419  ops/s
BenchmarkShapeSerde.deserializePoint                                16  thrpt   15  12651527.488 ±  112852.683  ops/s
BenchmarkShapeSerde.deserializePoint                                48  thrpt   15  12593172.264 ±  155867.113  ops/s
BenchmarkShapeSerde.deserializePolygon                               4  thrpt   15   4144635.085 ± 1408784.459  ops/s
BenchmarkShapeSerde.deserializePolygon                              16  thrpt   15   2631689.184 ±   54596.327  ops/s
BenchmarkShapeSerde.deserializePolygon                              48  thrpt   15   1080266.334 ±   12433.971  ops/s
BenchmarkShapeSerde.deserializePolygonWithHoles                      4  thrpt   15   1879053.138 ±   44807.996  ops/s
BenchmarkShapeSerde.deserializePolygonWithHoles                     16  thrpt   15    935320.826 ±   21522.550  ops/s
BenchmarkShapeSerde.deserializePolygonWithHoles                     48  thrpt   15    372153.289 ±    4147.566  ops/s
BenchmarkShapeSerde.serializeLineString                              4  thrpt   15   7387409.323 ±   71688.549  ops/s
BenchmarkShapeSerde.serializeLineString                             16  thrpt   15   2435478.028 ±   25253.840  ops/s
BenchmarkShapeSerde.serializeLineString                             48  thrpt   15    846611.699 ±   14683.498  ops/s
BenchmarkShapeSerde.serializeMultiPolygon                            4  thrpt   15   2299015.863 ±   67863.745  ops/s
BenchmarkShapeSerde.serializeMultiPolygon                           16  thrpt   15    767753.632 ±   14161.948  ops/s
BenchmarkShapeSerde.serializeMultiPolygon                           48  thrpt   15    257898.253 ±    3525.939  ops/s
BenchmarkShapeSerde.serializePoint                                   4  thrpt   15  29058755.387 ±  311885.845  ops/s
BenchmarkShapeSerde.serializePoint                                  16  thrpt   15  28848687.839 ±  622858.487  ops/s
BenchmarkShapeSerde.serializePoint                                  48  thrpt   15  28655646.879 ±  724705.083  ops/s
BenchmarkShapeSerde.serializePolygon                                 4  thrpt   15   3585135.017 ±   92961.753  ops/s
BenchmarkShapeSerde.serializePolygon                                16  thrpt   15   2237828.759 ±   28902.269  ops/s
BenchmarkShapeSerde.serializePolygon                                48  thrpt   15    833346.617 ±   11622.653  ops/s
BenchmarkShapeSerde.serializePolygonWithHoles                        4  thrpt   15   2433478.545 ±   48002.330  ops/s
BenchmarkShapeSerde.serializePolygonWithHoles                       16  thrpt   15    798126.982 ±    9033.043  ops/s
BenchmarkShapeSerde.serializePolygonWithHoles                       48  thrpt   15    263934.998 ±    3342.026  ops/s
BenchmarkShapeSerdeOptimized.deserializeLineString                   4  thrpt   15   2650562.767 ±   47135.405  ops/s
BenchmarkShapeSerdeOptimized.deserializeLineString                  16  thrpt   15    803301.186 ±   10286.082  ops/s
BenchmarkShapeSerdeOptimized.deserializeLineString                  48  thrpt   15    285268.991 ±    4294.714  ops/s
BenchmarkShapeSerdeOptimized.deserializeMultiPolygon                 4  thrpt   15   1658000.825 ±   53096.103  ops/s
BenchmarkShapeSerdeOptimized.deserializeMultiPolygon                16  thrpt   15    583509.084 ±  240406.288  ops/s
BenchmarkShapeSerdeOptimized.deserializeMultiPolygon                48  thrpt   15    251770.174 ±  117621.458  ops/s
BenchmarkShapeSerdeOptimized.deserializePoint                        4  thrpt   15  27931361.305 ±  385842.745  ops/s
BenchmarkShapeSerdeOptimized.deserializePoint                       16  thrpt   15  27335831.562 ±  877558.951  ops/s
BenchmarkShapeSerdeOptimized.deserializePoint                       48  thrpt   15  27911360.783 ±  450902.729  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygon                      4  thrpt   15   2288792.439 ±   31483.793  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygon                     16  thrpt   15   1325190.717 ±  798858.541  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygon                     48  thrpt   15    304133.937 ±    3489.080  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygonWithHoles             4  thrpt   15   1077204.747 ±  453155.153  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygonWithHoles            16  thrpt   15    436367.131 ±  249583.348  ops/s
BenchmarkShapeSerdeOptimized.deserializePolygonWithHoles            48  thrpt   15    102762.805 ±    1289.364  ops/s
BenchmarkShapeSerdeOptimized.serializeLineString                     4  thrpt   15  11942618.981 ±   59506.150  ops/s
BenchmarkShapeSerdeOptimized.serializeLineString                    16  thrpt   15   4393438.416 ±   33253.891  ops/s
BenchmarkShapeSerdeOptimized.serializeLineString                    48  thrpt   15   1552424.222 ±   10749.546  ops/s
BenchmarkShapeSerdeOptimized.serializeMultiPolygon                   4  thrpt   15   2592810.673 ± 1490890.662  ops/s
BenchmarkShapeSerdeOptimized.serializeMultiPolygon                  16  thrpt   15   1296729.904 ±   16064.890  ops/s
BenchmarkShapeSerdeOptimized.serializeMultiPolygon                  48  thrpt   15    414840.230 ±    3919.459  ops/s
BenchmarkShapeSerdeOptimized.serializePoint                          4  thrpt   15  28805485.667 ± 1158334.118  ops/s
BenchmarkShapeSerdeOptimized.serializePoint                         16  thrpt   15  29207428.802 ±  507545.672  ops/s
BenchmarkShapeSerdeOptimized.serializePoint                         48  thrpt   15  28815526.244 ±  516126.504  ops/s
BenchmarkShapeSerdeOptimized.serializePolygon                        4  thrpt   15   7363746.958 ± 4194000.925  ops/s
BenchmarkShapeSerdeOptimized.serializePolygon                       16  thrpt   15   4172214.035 ±   41907.645  ops/s
BenchmarkShapeSerdeOptimized.serializePolygon                       48  thrpt   15   1480315.861 ±   27861.941  ops/s
BenchmarkShapeSerdeOptimized.serializePolygonWithHoles               4  thrpt   15   3836744.947 ±   98527.161  ops/s
BenchmarkShapeSerdeOptimized.serializePolygonWithHoles              16  thrpt   15   1003675.392 ±  621680.964  ops/s
BenchmarkShapeSerdeOptimized.serializePolygonWithHoles              48  thrpt   15    190954.856 ±  185352.976  ops/s
BenchmarkWkbSerde.deserializeGeometryCollection                      4  thrpt   15    353873.736 ±    9514.961  ops/s
BenchmarkWkbSerde.deserializeGeometryCollection                     16  thrpt   15    115786.636 ±    3367.275  ops/s
BenchmarkWkbSerde.deserializeGeometryCollection                     48  thrpt   15     48571.012 ±    3473.549  ops/s
BenchmarkWkbSerde.deserializeLineString                              4  thrpt   15   3535388.561 ±  117418.091  ops/s
BenchmarkWkbSerde.deserializeLineString                             16  thrpt   15   1259754.258 ±   35932.984  ops/s
BenchmarkWkbSerde.deserializeLineString                             48  thrpt   15    427689.166 ±   10535.889  ops/s
BenchmarkWkbSerde.deserializeMultiPolygon                            4  thrpt   15    924313.781 ±   55593.794  ops/s
BenchmarkWkbSerde.deserializeMultiPolygon                           16  thrpt   15    350545.929 ±   23920.213  ops/s
BenchmarkWkbSerde.deserializeMultiPolygon                           48  thrpt   15    133248.841 ±    8888.038  ops/s
BenchmarkWkbSerde.deserializePoint                                   4  thrpt   15   7988725.699 ±  600254.551  ops/s
BenchmarkWkbSerde.deserializePoint                                  16  thrpt   15   7602919.540 ±  189344.770  ops/s
BenchmarkWkbSerde.deserializePoint                                  48  thrpt   15   8482761.785 ±  729931.903  ops/s
BenchmarkWkbSerde.deserializePolygon                                 4  thrpt   15   2897738.957 ±   94289.847  ops/s
BenchmarkWkbSerde.deserializePolygon                                16  thrpt   15   1162485.728 ±   27084.584  ops/s
BenchmarkWkbSerde.deserializePolygon                                48  thrpt   15    427895.058 ±   14366.501  ops/s
BenchmarkWkbSerde.deserializePolygonWithHoles                        4  thrpt   15   1089982.831 ±   12943.848  ops/s
BenchmarkWkbSerde.deserializePolygonWithHoles                       16  thrpt   15    395565.471 ±   10037.347  ops/s
BenchmarkWkbSerde.deserializePolygonWithHoles                       48  thrpt   15    138902.678 ±    3001.311  ops/s
BenchmarkWkbSerde.serializeGeometryCollection                        4  thrpt   15    434286.545 ±    6382.072  ops/s
BenchmarkWkbSerde.serializeGeometryCollection                       16  thrpt   15    132029.328 ±    2136.662  ops/s
BenchmarkWkbSerde.serializeGeometryCollection                       48  thrpt   15     53318.871 ±    1303.106  ops/s
BenchmarkWkbSerde.serializeLineString                                4  thrpt   15   3629468.081 ±   84098.364  ops/s
BenchmarkWkbSerde.serializeLineString                               16  thrpt   15   1260440.970 ±   22672.439  ops/s
BenchmarkWkbSerde.serializeLineString                               48  thrpt   15    483728.484 ±    5377.167  ops/s
BenchmarkWkbSerde.serializeMultiPolygon                              4  thrpt   15   1083983.773 ±   20595.671  ops/s
BenchmarkWkbSerde.serializeMultiPolygon                             16  thrpt   15    419443.362 ±    9346.575  ops/s
BenchmarkWkbSerde.serializeMultiPolygon                             48  thrpt   15    131880.374 ±    2703.216  ops/s
BenchmarkWkbSerde.serializePoint                                     4  thrpt   15   9460805.731 ±  250763.009  ops/s
BenchmarkWkbSerde.serializePoint                                    16  thrpt   15   9363157.813 ±  151109.979  ops/s
BenchmarkWkbSerde.serializePoint                                    48  thrpt   15   9256892.374 ±  156025.815  ops/s
BenchmarkWkbSerde.serializePolygon                                   4  thrpt   15   3071523.369 ±   73344.630  ops/s
BenchmarkWkbSerde.serializePolygon                                  16  thrpt   15   1131171.721 ±   57594.721  ops/s
BenchmarkWkbSerde.serializePolygon                                  48  thrpt   15    467322.511 ±    9350.814  ops/s
BenchmarkWkbSerde.serializePolygonWithHoles                          4  thrpt   15   1291730.781 ±   43796.984  ops/s
BenchmarkWkbSerde.serializePolygonWithHoles                         16  thrpt   15    447937.994 ±    8998.919  ops/s
BenchmarkWkbSerde.serializePolygonWithHoles                         48  thrpt   15    136061.201 ±    1568.108  ops/s
BenchmarkWkbSerdeBigEndian.deserializeGeometryCollection             4  thrpt   15    362615.375 ±    4389.499  ops/s
BenchmarkWkbSerdeBigEndian.deserializeGeometryCollection            16  thrpt   15    145023.171 ±    2723.841  ops/s
BenchmarkWkbSerdeBigEndian.deserializeGeometryCollection            48  thrpt   15     49397.337 ±    3438.891  ops/s
BenchmarkWkbSerdeBigEndian.deserializeLineString                     4  thrpt   15   3606209.922 ±  116831.043  ops/s
BenchmarkWkbSerdeBigEndian.deserializeLineString                    16  thrpt   15   1269034.297 ±   29428.066  ops/s
BenchmarkWkbSerdeBigEndian.deserializeLineString                    48  thrpt   15    430655.388 ±    9784.084  ops/s
BenchmarkWkbSerdeBigEndian.deserializeMultiPolygon                   4  thrpt   15    937641.477 ±   10554.851  ops/s
BenchmarkWkbSerdeBigEndian.deserializeMultiPolygon                  16  thrpt   15    360395.951 ±   21088.214  ops/s
BenchmarkWkbSerdeBigEndian.deserializeMultiPolygon                  48  thrpt   15    136800.527 ±    4562.030  ops/s
BenchmarkWkbSerdeBigEndian.deserializePoint                          4  thrpt   15   7795055.780 ±   85079.226  ops/s
BenchmarkWkbSerdeBigEndian.deserializePoint                         16  thrpt   15   7861593.671 ±   77327.441  ops/s
BenchmarkWkbSerdeBigEndian.deserializePoint                         48  thrpt   15   8299626.102 ±  715367.400  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygon                        4  thrpt   15   2933975.282 ±   38262.846  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygon                       16  thrpt   15   1163350.009 ±   31362.635  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygon                       48  thrpt   15    433797.136 ±   13363.551  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygonWithHoles               4  thrpt   15   1071491.184 ±   32711.979  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygonWithHoles              16  thrpt   15    405979.957 ±   14759.794  ops/s
BenchmarkWkbSerdeBigEndian.deserializePolygonWithHoles              48  thrpt   15    141905.842 ±    1951.847  ops/s
BenchmarkWkbSerdeBigEndian.serializeGeometryCollection               4  thrpt   15    431147.251 ±   13285.303  ops/s
BenchmarkWkbSerdeBigEndian.serializeGeometryCollection              16  thrpt   15    132833.375 ±    2458.627  ops/s
BenchmarkWkbSerdeBigEndian.serializeGeometryCollection              48  thrpt   15     53720.147 ±     918.329  ops/s
BenchmarkWkbSerdeBigEndian.serializeLineString                       4  thrpt   15   3661247.185 ±   76358.749  ops/s
BenchmarkWkbSerdeBigEndian.serializeLineString                      16  thrpt   15   1223572.029 ±   31619.141  ops/s
BenchmarkWkbSerdeBigEndian.serializeLineString                      48  thrpt   15    490936.092 ±    7871.775  ops/s
BenchmarkWkbSerdeBigEndian.serializeMultiPolygon                     4  thrpt   15   1077598.167 ±   16611.251  ops/s
BenchmarkWkbSerdeBigEndian.serializeMultiPolygon                    16  thrpt   15    418136.347 ±   10355.517  ops/s
BenchmarkWkbSerdeBigEndian.serializeMultiPolygon                    48  thrpt   15    135454.184 ±    3054.765  ops/s
BenchmarkWkbSerdeBigEndian.serializePoint                            4  thrpt   15   9569069.880 ±  153428.562  ops/s
BenchmarkWkbSerdeBigEndian.serializePoint                           16  thrpt   15   9323075.255 ±  255080.776  ops/s
BenchmarkWkbSerdeBigEndian.serializePoint                           48  thrpt   15   9454431.106 ±  113176.464  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygon                          4  thrpt   15   3110878.670 ±   41876.701  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygon                         16  thrpt   15   1202168.953 ±   48284.138  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygon                         48  thrpt   15    476320.315 ±    9097.205  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygonWithHoles                 4  thrpt   15   1292631.864 ±   29413.383  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygonWithHoles                16  thrpt   15    452401.052 ±    6683.356  ops/s
BenchmarkWkbSerdeBigEndian.serializePolygonWithHoles                48  thrpt   15    138247.585 ±    2488.268  ops/s