forked from TrueCloudLab/frostfs-node
[#957] treesvc: Use sorting when number of items is small
Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
parent
d18eaf060d
commit
8cbf9a0b44
2 changed files with 14 additions and 6 deletions
|
@ -13,7 +13,7 @@ import (
|
|||
)
|
||||
|
||||
func BenchmarkGetSubTree(b *testing.B) {
|
||||
const count = 100_000
|
||||
const count = simpleHeapFallbackThreshold
|
||||
|
||||
d := pilorama.CIDDescriptor{CID: cidtest.ID(), Size: 1}
|
||||
treeID := "sometree"
|
||||
|
|
|
@ -446,11 +446,19 @@ type Heap interface {
|
|||
ExtractMin() pilorama.NodeInfo
|
||||
}
|
||||
|
||||
func makeHeap(ordered bool) Heap {
|
||||
if ordered {
|
||||
// simpleHeapFallbackThreshold is the least number of nodes on a single level,
|
||||
// for which pairing heap implementation is used.
|
||||
const simpleHeapFallbackThreshold = 100_000
|
||||
|
||||
func makeHeap(ordered bool, count int) Heap {
|
||||
switch {
|
||||
case ordered && simpleHeapFallbackThreshold <= count:
|
||||
return heap.NewPairing()
|
||||
case ordered:
|
||||
return heap.NewOrderedSlice()
|
||||
default:
|
||||
return heap.NewUnorderedSlice()
|
||||
}
|
||||
return heap.NewUnorderedSlice()
|
||||
}
|
||||
|
||||
func getSubTree(ctx context.Context, srv TreeService_GetSubTreeServer, cid cidSDK.ID, b *GetSubTreeRequest_Body, forest pilorama.Forest) error {
|
||||
|
@ -466,7 +474,7 @@ func getSubTree(ctx context.Context, srv TreeService_GetSubTreeServer, cid cidSD
|
|||
return err
|
||||
}
|
||||
|
||||
stack := []Heap{makeHeap(ordered)}
|
||||
stack := []Heap{makeHeap(ordered, 1)}
|
||||
stack[0].Insert(pilorama.NodeInfo{
|
||||
ID: b.GetRootId(),
|
||||
Meta: m,
|
||||
|
@ -501,7 +509,7 @@ func getSubTree(ctx context.Context, srv TreeService_GetSubTreeServer, cid cidSD
|
|||
return err
|
||||
}
|
||||
if len(children) != 0 {
|
||||
h := makeHeap(ordered)
|
||||
h := makeHeap(ordered, len(children))
|
||||
h.Insert(children...)
|
||||
stack = append(stack, h)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue