
Serge
30.10.2016
18:48:06
Мне почему-то кажется, что правильнее y gt, а потом уже x in. И индекс также построить.
Тогда сортировка результата будет по той, что в индексе работать.
Первый in ломает возможность задействовать double buffer для выборки по gt

[Anonymous]
30.10.2016
18:53:24
Ну он тогда выстраивает indexBounds по одному ID.

Google

[Anonymous]
30.10.2016
18:53:30
[1,1], потом y
Дело в том, что это на проде.

Serge
30.10.2016
18:55:46
А просто на локале попробовать сложно?

[Anonymous]
30.10.2016
18:57:10
На локале все летает.
На локалке адекватно не проверишь, потому что нужно залить пару лярдов данных.
А у меня места на компе нет чтобы бэкап скачать.

Serge
30.10.2016
18:59:34
Достаточно посмотреть explain

[Anonymous]
30.10.2016
19:01:02
Тут проблема была в том, что он переключился на другой план.
Возможно вместо compound до этого использовалась интерсекция.

Serge
30.10.2016
19:01:45
Ну, вот надо смотреть. Можно разные планы...

[Anonymous]
30.10.2016
19:01:48
Вот я проебался, потому что до этого не смотрел, какой индекс используется.

Google

[Anonymous]
30.10.2016
19:02:01
А сейчас это как гадание на кофейной гуще, потому что зафорсить индекс нельзя на агрегацию.
Приходится исхищряться.
Т.е. я хочу получить записи определённых пользователей по timestamp'у выше, чем я задаю.
Поэтому у меня два индекса -1, т.к. кроме timestamp'a чаще пишут новые пользователи. Они все в начале по сортировке.

Serge
30.10.2016
19:18:01
Запрос то какой? Условие

[Anonymous]
30.10.2016
19:19:21
Ну я пытаюсь получить все сообщения определённых пользователей за последние X дней.
Следовательно есть $in на пользователей и $gte на timestamp.
При этом я знаю, что чаще всего в эту выборку попадают пользователи с большим ID.
И все данные (timestamp) лежат "в хвосте" (последние).
Т.е. я не запрашиваю данные за прошлый год, мне нужные последние X дней.
Вот я сейчас сделал id, timestamp и timestamp, id. С timestamp, id результаты хуже, чем с id, timestamp.

yopp
30.10.2016
23:40:08
Почитай про составные индексы и сортировку. В доке кажется есть ответ на твой вопрос.
Плюс тренируйся на find, match stage в 99% работает идентично

Serge
02.11.2016
16:00:13
Нашествие?

Dmitry
02.11.2016
16:01:48
интересно откуда :)

Mikhail
02.11.2016
16:02:55
отсюда
http://netology.ru/blog/prg-tg?utm_source=forwebdev&utm_medium=announcement&utm_campaign=bolshaya-kollektsiya-iz-133-kanalov-i-chatov&stop=1

Serge
02.11.2016
18:09:33
Всем привет:)

Google

Serge
02.11.2016
18:10:10
А напишите, вновь прибывшие, кто как MongoDB использует, если не сложно.:)

Serg
02.11.2016
18:10:34
привет
как только не используем, но по большей части как вспомогательный инструмент. Я пилю всякую аналитику, макеты рабочие делаю и т.д. Сертификаты кто получал их?

Serge
02.11.2016
18:13:12

Serg
02.11.2016
18:13:38
я курсы DBA и Node.js + монга на 100% закрыл, но чет как-то забил на сертификацию

Naumenko
02.11.2016
18:16:06
привет, я ноду учу, но пока не использую в коммерческих проектах, монгу тоже использую в обучении

Serg
02.11.2016
18:16:21
коллекцию вертеть с 7млн документов - то еще удовольствие

Serge
02.11.2016
18:17:56
А еще интересно кто из каких городов:)

Serg
02.11.2016
18:19:02
монга больше для малых и средних объемов данных подходит, для больших объемов нужно оперативки столько, чтоб вся база в ней помещалась иначе сильное падение производительности

Serge
02.11.2016
18:19:02

Serg
02.11.2016
18:19:04
мск

[Anonymous]
02.11.2016
18:19:04
Нет?

Serge
02.11.2016
18:19:16

[Anonymous]
02.11.2016
18:20:18
На одном сервере ещё, даже без кластера.
Эх, а ведь скоро нужно будет шарды делать.

Google

[Anonymous]
02.11.2016
18:20:30
Всё никак руки не дойдут.
Я думаю, основные проблемы начинаются как раз на этом этапе.

Serg
02.11.2016
18:21:43
скажем задача создать доп поле для каждого документа на основании нескольких полей текущего, выжирает очень много оперативки, вплоть до аут оф мемори

[Anonymous]
02.11.2016
18:22:03
А как ты это делаешь?..
Это же очень простая операция.

Andrey
02.11.2016
18:22:31

[Anonymous]
02.11.2016
18:22:33
Может быть ты ищешь не по индексу? Тогда полноценное сканирование коллекции может хорошо повесить процессор.
Да и диск вместе с ним иногда.

Alex
02.11.2016
18:25:06
а зачем искать по индексу, если нужно обойти все документы?

Serg
02.11.2016
18:25:40
var col = "transactions_original";
var bulk = db.getCollection(col).initializeUnorderedBulkOp();
var i = 0;
var pipe = [{$match: {}}];
db.getCollection(col)
.aggregate(pipe, {allowDiskUse: true})
.forEach(function(item) {
var a = item.tr_datetime
.split(" ")[1]
.split(":");
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]);
bulk.find({ "_id" : item._id })
.updateOne(
{ $push: {
"train_set.input" : {
$each: [
item.customer_id/1000000000,
item.tr_datetime.split(" ")[0]/1000,
seconds/100000,
item.mcc_code/10000,
item.tr_type/10000,
(item.amount+145984525.17)/300000000
]
}
}
}
);
});
bulk.execute();

Serge
02.11.2016
18:26:58

[Anonymous]
02.11.2016
18:31:54

Alex
02.11.2016
18:31:58

ptchol
02.11.2016
18:32:12
У нас на старой работе монга была как хранилище raw transaction для rtb / ssp /dsp

[Anonymous]
02.11.2016
18:32:14
Или это ошибка?
Я разворачивал без реплики на локалках, вроде всё норм.

ptchol
02.11.2016
18:33:24
на новой, мы храним в монге все данные DRM в максимально денормализованном виде.

Alex
02.11.2016
18:33:36
монго не рекомендует... а как бэкапить, например?

[Anonymous]
02.11.2016
18:34:24