...

Source file src/go.mongodb.org/mongo-driver/benchmark/bson_map.go

Documentation: go.mongodb.org/mongo-driver/benchmark

     1  // Copyright (C) MongoDB, Inc. 2017-present.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License"); you may
     4  // not use this file except in compliance with the License. You may obtain
     5  // a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
     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