2
0
Files
pgx/pgtype
Evan Jones 2de94187f5 hstore: Make binary parsing 2X faster
* use []string for value string pointers: one allocation instead of
  one per value.
* use one string for all key/value pairs, instead of one for each.

After this change, one Hstore will share two allocations: one string
and one []string. The disadvantage is that it cannot be deallocated
until all key/value pairs are unused. This means if an application
takes a single key or value from the Hstore and holds on to it, its
memory footprint will increase. I would guess this is an unlikely
problem, but it is possible.

The benchstat results from my M1 Max are below.

goos: darwin
goarch: arm64
pkg: github.com/jackc/pgx/v5/pgtype
                               │   orig.txt   │               new.txt               │
                               │    sec/op    │   sec/op     vs base                │
HstoreScan/databasesql.Scan-10    82.11µ ± 1%   82.66µ ± 2%        ~ (p=0.436 n=10)
HstoreScan/text-10                83.30µ ± 1%   84.24µ ± 3%        ~ (p=0.165 n=10)
HstoreScan/binary-10             15.987µ ± 2%   7.459µ ± 6%  -53.35% (p=0.000 n=10)
geomean                           47.82µ        37.31µ       -21.98%

                               │   orig.txt   │               new.txt               │
                               │     B/op     │     B/op      vs base               │
HstoreScan/databasesql.Scan-10   56.23Ki ± 0%   56.23Ki ± 0%       ~ (p=0.324 n=10)
HstoreScan/text-10               65.12Ki ± 0%   65.12Ki ± 0%       ~ (p=0.675 n=10)
HstoreScan/binary-10             21.09Ki ± 0%   20.73Ki ± 0%  -1.70% (p=0.000 n=10)
geomean                          42.58Ki        42.34Ki       -0.57%

                               │  orig.txt   │               new.txt                │
                               │  allocs/op  │ allocs/op   vs base                  │
HstoreScan/databasesql.Scan-10    744.0 ± 0%   744.0 ± 0%        ~ (p=1.000 n=10) ¹
HstoreScan/text-10                743.0 ± 0%   743.0 ± 0%        ~ (p=1.000 n=10) ¹
HstoreScan/binary-10             464.00 ± 0%   41.00 ± 0%  -91.16% (p=0.000 n=10)
geomean                           635.4        283.0       -55.46%
¹ all samples are equal
2023-06-16 15:31:37 -05:00
..
2022-04-09 09:12:55 -05:00
2023-02-10 20:21:25 -06:00
2022-04-16 14:21:40 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2023-05-20 08:53:23 -05:00
2022-11-12 07:06:54 -06:00
2022-07-11 08:07:23 -05:00
2022-04-09 09:09:46 -05:00
2022-12-17 09:10:02 -06:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2023-03-25 10:22:11 -05:00
2023-03-25 10:22:11 -05:00
2023-03-25 10:22:11 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-09-24 10:30:12 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-23 11:10:04 -05:00
2022-04-23 11:10:04 -05:00
2022-04-09 09:12:55 -05:00
2022-05-12 17:13:49 -05:00
2022-04-02 14:34:19 -05:00
2023-01-24 07:55:00 -06:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-09 09:12:55 -05:00
2022-04-02 14:34:19 -05:00
2022-04-26 08:37:10 -05:00
2022-04-26 08:37:10 -05:00