...
1
2
3
4
5
6
7 package benchmark
8
9 import (
10 "context"
11 "errors"
12 "fmt"
13
14 "go.mongodb.org/mongo-driver/bson"
15 )
16
17 func bsonMapDecoding(tm TimerManager, iters int, dataSet string) error {
18 r, err := loadSourceRaw(getProjectRoot(), perfDataDir, bsonDataDir, dataSet)
19 if err != nil {
20 return err
21 }
22
23 tm.ResetTimer()
24
25 for i := 0; i < iters; i++ {
26 out := make(map[string]interface{})
27 err := bson.Unmarshal(r, &out)
28 if err != nil {
29 return nil
30 }
31 if len(out) == 0 {
32 return fmt.Errorf("decoding failed")
33 }
34 }
35 return nil
36 }
37
38 func bsonMapEncoding(tm TimerManager, iters int, dataSet string) error {
39 r, err := loadSourceRaw(getProjectRoot(), perfDataDir, bsonDataDir, dataSet)
40 if err != nil {
41 return err
42 }
43
44 doc := make(map[string]interface{})
45 err = bson.Unmarshal(r, &doc)
46 if err != nil {
47 return err
48 }
49
50 var buf []byte
51 tm.ResetTimer()
52 for i := 0; i < iters; i++ {
53 buf, err = bson.MarshalAppend(buf[:0], doc)
54 if err != nil {
55 return nil
56 }
57
58 if len(buf) == 0 {
59 return errors.New("encoding failed")
60 }
61 }
62
63 return nil
64 }
65
66 func BSONFlatMapDecoding(_ context.Context, tm TimerManager, iters int) error {
67 return bsonMapDecoding(tm, iters, flatBSONData)
68 }
69
70 func BSONFlatMapEncoding(_ context.Context, tm TimerManager, iters int) error {
71 return bsonMapEncoding(tm, iters, flatBSONData)
72 }
73
74 func BSONDeepMapDecoding(_ context.Context, tm TimerManager, iters int) error {
75 return bsonMapDecoding(tm, iters, deepBSONData)
76 }
77
78 func BSONDeepMapEncoding(_ context.Context, tm TimerManager, iters int) error {
79 return bsonMapEncoding(tm, iters, deepBSONData)
80 }
81
82 func BSONFullMapDecoding(_ context.Context, tm TimerManager, iters int) error {
83 return bsonMapDecoding(tm, iters, fullBSONData)
84 }
85
86 func BSONFullMapEncoding(_ context.Context, tm TimerManager, iters int) error {
87 return bsonMapEncoding(tm, iters, fullBSONData)
88 }
89
View as plain text