Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-32302

for-each loop over BSONObj is slower than explicit BSONObjIterator in MatchExpressionParser code

    • Type: Icon: Improvement Improvement
    • Resolution: Fixed
    • Priority: Icon: Major - P3 Major - P3
    • 3.6.7, 3.7.1
    • Affects Version/s: 3.6.0
    • Component/s: Internal Code
    • Labels:
      None
    • Fully Compatible
    • v3.6
    • Platforms 2018-01-01, Platforms 2018-01-15
    • 0

      As a part of SERVER-30761, we refactored parseInExpression() and changed a loop that looked like

      BSONObjIterator iter(theArray);
      while (iter.more()) {
          auto e = iter.next();
          // ...
      }
      

      into

      for (auto e : theArray) {
          // ...
      }
      

      This has caused a performance regression of roughly 5% when parsing a $in, and is apparent with very large in expressions. The real fix seems like achieving performance parity between the two ways to iterate through a BSONObj, but I'm not sure how much we want to dive down the rabbit hole in terms of seeing the machine code that's generated by the two constructs.

            Assignee:
            mathias@mongodb.com Mathias Stearn
            Reporter:
            kyle.suarez@mongodb.com Kyle Suarez
            Votes:
            0 Vote for this issue
            Watchers:
            7 Start watching this issue

              Created:
              Updated:
              Resolved: