Benchmark various geometry serdes and roll my own faster serdes
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.
./gradlew jmh
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.
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