frostfs-node/pkg/local_object_storage/metabase
Evgenii Stratonikov 81f925d5a0 [#1516] metabase: Optimize ListWithCursor for long listings
Cache buckets outside of the main loop and allocate memory for the
resulting offset only once.

```
name                        old time/op    new time/op    delta
ListWithCursor/1_item-8       6.45µs ±14%    5.79µs ±11%  -10.24%  (p=0.002 n=10+10)
ListWithCursor/10_items-8     20.9µs ±17%    17.3µs ± 9%  -17.27%  (p=0.000 n=10+10)
ListWithCursor/100_items-8     153µs ±12%     131µs ± 9%  -14.63%  (p=0.000 n=10+10)

name                        old alloc/op   new alloc/op   delta
ListWithCursor/1_item-8       2.31kB ± 0%    1.91kB ± 0%  -17.46%  (p=0.000 n=10+10)
ListWithCursor/10_items-8     6.94kB ± 0%    5.50kB ± 0%  -20.78%  (p=0.000 n=8+8)
ListWithCursor/100_items-8    53.3kB ± 0%    41.5kB ± 0%  -22.18%  (p=0.000 n=10+10)

name                        old allocs/op  new allocs/op  delta
ListWithCursor/1_item-8         40.0 ± 0%      34.0 ± 0%  -15.00%  (p=0.000 n=10+10)
ListWithCursor/10_items-8        121 ± 0%       100 ± 0%  -17.36%  (p=0.000 n=10+10)
ListWithCursor/100_items-8       930 ± 0%       758 ± 0%  -18.49%  (p=0.000 n=10+10)
```

Signed-off-by: Evgenii Stratonikov <evgeniy@nspcc.ru>
2022-06-15 20:49:41 +03:00
..
containers.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
containers_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
control.go [#1318] metabase: Separate buckets with TS and GC marks 2022-04-29 16:38:52 +03:00
control_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
db.go [#1433] metabase: Optimize Select 2022-06-03 14:25:07 +03:00
db_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
delete.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
delete_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
errors.go [#1247] object: Return NOT_FOUND and ALREADY_REMOVED statuses 2022-03-17 16:34:00 +03:00
exists.go [#1516] metabase: Cache graveyard buckets in ListWithCursor 2022-06-15 20:49:41 +03:00
exists_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
get.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
get_test.go [#1460] meta: Add a benchmark on Get operation 2022-06-06 18:03:12 +03:00
graveyard.go [#1418] meta: Do not use pointers as parameters 2022-06-03 07:35:17 +03:00
graveyard_test.go [#1418] meta: Do not use pointers as parameters 2022-06-03 07:35:17 +03:00
index_test.go [#1262] metabase: Remove intermediate allocations in decodeList 2022-03-28 17:08:11 +03:00
info.go [#638] Update to Go 1.16 2021-06-29 13:44:59 +03:00
inhume.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
inhume_test.go [#1418] meta: Do not use pointers as parameters 2022-06-03 07:35:17 +03:00
iterators.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
iterators_test.go [#1418] meta: Do not use pointers as parameters 2022-06-03 07:35:17 +03:00
list.go [#1516] metabase: Optimize ListWithCursor for long listings 2022-06-15 20:49:41 +03:00
list_test.go [#1516] metabase: Add benchmark for ListWithCursor 2022-06-15 20:49:41 +03:00
lock.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
lock_test.go [#1418] meta: Do not use pointers as parameters 2022-06-03 07:35:17 +03:00
movable.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
movable_test.go [#1214] *: Use single Object type in whole project 2022-03-04 17:45:00 +03:00
put.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
put_test.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00
select.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
select_test.go [#1433] metabase: Optimize Select 2022-06-03 14:25:07 +03:00
shard_id.go [#1204] shard: Save ID in the metabase 2022-03-04 17:13:13 +03:00
small.go [#1460] meta: Do not use pointers as the results 2022-06-06 18:03:12 +03:00
small_test.go [#1214] *: Use single Object type in whole project 2022-03-04 17:45:00 +03:00
util.go [#1454] Upgrade NeoFS SDK Go module with new IDs 2022-06-01 17:41:45 +03:00