1
2
3
4
5
6
7 package benchmark
8
9 import (
10 "context"
11 "errors"
12
13 "go.mongodb.org/mongo-driver/bson"
14 )
15
16 func bsonDocumentEncoding(tm TimerManager, iters int, source string) error {
17 doc, err := loadSourceDocument(getProjectRoot(), perfDataDir, bsonDataDir, source)
18 if err != nil {
19 return err
20 }
21
22 tm.ResetTimer()
23
24 for i := 0; i < iters; i++ {
25 out, err := bson.Marshal(doc)
26 if err != nil {
27 return err
28 }
29 if len(out) == 0 {
30 return errors.New("marshaling error")
31 }
32 }
33
34 return nil
35 }
36
37 func bsonDocumentDecodingLazy(tm TimerManager, iters int, source string) error {
38 doc, err := loadSourceDocument(getProjectRoot(), perfDataDir, bsonDataDir, source)
39 if err != nil {
40 return err
41 }
42
43 raw, err := bson.Marshal(doc)
44 if err != nil {
45 return err
46 }
47
48 tm.ResetTimer()
49
50 for i := 0; i < iters; i++ {
51 var out bson.D
52 err := bson.Unmarshal(raw, &out)
53 if err != nil {
54 return err
55 }
56 if len(out) == 0 {
57 return errors.New("marshaling error")
58 }
59 }
60 return nil
61 }
62
63 func bsonDocumentDecoding(tm TimerManager, iters, numKeys int, source string) error {
64 doc, err := loadSourceDocument(getProjectRoot(), perfDataDir, bsonDataDir, source)
65 if err != nil {
66 return err
67 }
68
69 raw, err := bson.Marshal(doc)
70 if err != nil {
71 return err
72 }
73
74 tm.ResetTimer()
75
76 for i := 0; i < iters; i++ {
77 var out bson.D
78 err := bson.Unmarshal(raw, &out)
79 if err != nil {
80 return err
81 }
82
83 if len(out) != numKeys {
84 return errors.New("document parsing error")
85 }
86 }
87 return nil
88
89 }
90
91 func BSONFlatDocumentEncoding(_ context.Context, tm TimerManager, iters int) error {
92 return bsonDocumentEncoding(tm, iters, flatBSONData)
93 }
94
95 func BSONFlatDocumentDecodingLazy(_ context.Context, tm TimerManager, iters int) error {
96 return bsonDocumentDecodingLazy(tm, iters, flatBSONData)
97 }
98
99 func BSONFlatDocumentDecoding(_ context.Context, tm TimerManager, iters int) error {
100 return bsonDocumentDecoding(tm, iters, 145, flatBSONData)
101 }
102
103 func BSONDeepDocumentEncoding(_ context.Context, tm TimerManager, iters int) error {
104 return bsonDocumentEncoding(tm, iters, deepBSONData)
105 }
106
107 func BSONDeepDocumentDecodingLazy(_ context.Context, tm TimerManager, iters int) error {
108 return bsonDocumentDecodingLazy(tm, iters, deepBSONData)
109 }
110
111 func BSONDeepDocumentDecoding(_ context.Context, tm TimerManager, iters int) error {
112 return bsonDocumentDecoding(tm, iters, 126, deepBSONData)
113 }
114
115 func BSONFullDocumentEncoding(_ context.Context, tm TimerManager, iters int) error {
116 return bsonDocumentEncoding(tm, iters, fullBSONData)
117 }
118
119 func BSONFullDocumentDecodingLazy(_ context.Context, tm TimerManager, iters int) error {
120 return bsonDocumentDecodingLazy(tm, iters, fullBSONData)
121 }
122
123 func BSONFullDocumentDecoding(_ context.Context, tm TimerManager, iters int) error {
124 return bsonDocumentDecoding(tm, iters, 145, fullBSONData)
125 }
126
View as plain text