...

Source file src/go.mongodb.org/mongo-driver/benchmark/bson_document.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  
    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