bson_map.go 2.1 KB

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