Какой алогритм сортировки используется сортировкой mongodb и сортировкой вложенных массивов? - PullRequest
0 голосов
/ 18 июня 2020

Я экспериментирую с производительностью MongoDB sort, чтобы решить, хранить ли историю местоположений пользователя {ts: DATE(), location: "loc"} (maxHistorySize = 100) в объекте пользователя или в отдельной коллекции.

Моя цель - добиться лучшего TPS. Ожидается, что записей будет намного больше, чем операций чтения. *

При хранении в запрос записи будет примерно таким. Меня беспокоит, как быстро он сможет завершить сортировку sh. Поскольку $sort запускается каждый раз, когда происходит вставка, массив уже будет в значительной степени отсортирован. Мне интересно, имеет ли sort время выполнения O(log(n)) или O(nlog(n))

        update: {
          $setOnInsert: {userId: 'userId'},
          $push: {
            locations: {
              $each: [{location: 'location', ts: new Date()}],
              $slice: -100,
              $sort: {ts: 1}
            }
          },

При хранении отдельно мне пришлось бы создать индекс для ts. Поскольку MongoDB использует B-tree для создания индекса, я предполагаю, что накладные расходы составляют всего O (log (n)). Недостатком является то, что в нем используются лишние пробелы.

Я не знаю, где для начала приветствуются любые рекомендации. Спасибо

1 Ответ

0 голосов
/ 18 июня 2020

MongoDB использует std :: sort (вызывается из sortChildren вызывается из PushNode :: performPu sh.

Я считаю, что std :: sort - O (nlog (n)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...