Я экспериментирую с производительностью 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)). Недостатком является то, что в нем используются лишние пробелы.
Я не знаю, где для начала приветствуются любые рекомендации. Спасибо