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

    XMLWordPrintableJSON

Details

    • Icon: Improvement Improvement
    • Resolution: Fixed
    • Icon: Major - P3 Major - P3
    • 3.6.7, 3.7.1
    • 3.6.0
    • Internal Code
    • None
    • Fully Compatible
    • v3.6
    • Platforms 2018-01-01, Platforms 2018-01-15
    • 0

    Description

      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.

      Attachments

        Activity

          People

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

            Dates

              Created:
              Updated:
              Resolved: