@MongoDBRussian

Страница 285 из 342
AstraSerg
10.08.2018
08:22:50
@vasivas > ...как пофиксить это? в индексе вы можете задать порядок сортировки при создании. Это 1 или -1. Он должен соответствовать запросу. Но, на сколько я помню, мы с вами пришли к выводу, что индекс правиьлный, так как find-е работает, а в агрегации - нет.

Vasiliy
10.08.2018
08:24:42
ну порядок там роли не играет

одинаково долго

я и с тем и с другим пробовал

Google
Vasiliy
10.08.2018
08:25:10
пользы от этого нет

AstraSerg
10.08.2018
08:25:56
а, у вас там ещё размер одного из полей был большой

Vasiliy
10.08.2018
08:26:52
видно же что когда инжекс для сортировки не используется то оно правильно задаёт границы "indexBounds" : { "rig_session_id" : [ "[2234.0, 2234.0]", "[2255.0, 2255.0]" ] } а если индекс участвует в сортировке то вот так "indexBounds" : { "_id" : [ "[MinKey, MaxKey]" ] }

AstraSerg
10.08.2018
08:29:05
так в первом копипасте всего 2 документа уже на этот стейдж приходит

Vasiliy
10.08.2018
08:39:18
именно, а запрос отличается просто наличием индекса на created_at {'$sort': {created_at: 1}}

AstraSerg
10.08.2018
08:41:29
именно, а запрос отличается просто наличием индекса на created_at {'$sort': {created_at: 1}}
Сложно понять что-то не имея сведений о коллекции. Можете привести пример вашего документа попортив секретные данные в нём?

Vasiliy
10.08.2018
09:18:39
что-то типа такого https://pastebin.com/aCdMq7fK

вот запрос db.reports.aggregate([{ $match : { rig_session_id : { $in : [2234, 2255 ] } } },{'$sort': {created_at: 1}}, { $group : { _id : '$rig_session_id', hashrate: { $last : '$$ROOT' } } }])

AstraSerg
10.08.2018
09:24:10
что-то типа такого https://pastebin.com/aCdMq7fK
Так, а где закоженные в base64 данные?

Vasiliy
10.08.2018
09:25:48
"miner_log": "==", "os_log": "", я до сих пор не понимаю при чем они тут, потому что explain явно говорит что в случае с индексом indexBound берет диапазон от minKey до maxKey, а без него нормально работает с rig_session_id

AstraSerg
10.08.2018
09:26:02
что-то типа такого https://pastebin.com/aCdMq7fK
created_at это ISODate или строка?

Vasiliy
10.08.2018
09:26:09
строка

"created_at": "2018-08-03T18:02:04.508732Z",

Google
AstraSerg
10.08.2018
09:27:13
Ок, буду у компа через час, попробую на стенде

Vasiliy
10.08.2018
09:33:57
вообще

если в sort добавить rig_session_id(который в match участвует) то время существенно сокращается

могу скинуть executionStatus

походу понял

надо обязательно в match указывать параметры для поля которое будет в sort если оно индексовое

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

AstraSerg
10.08.2018
10:07:31
ОЧЕНЬ ЛЕГКО ДА
Вообще, да, не сложно. Только попрактиковаться немного. После этого разбирательства вы сильно продвинитесь.

Vasiliy
10.08.2018
10:49:41
ребят а как лучше делать, при наличии такого же индекса как в сортировке - сортировать -1 и потом в гроуп брать $first или сортировать 1 и в группировке брать $last?

Vasiliy
10.08.2018
11:08:46
да, спасибо большое за отзывчивость, просто надо было индексное поле по которому сортируется добавить в match

AstraSerg
10.08.2018
11:11:59
да, спасибо большое за отзывчивость, просто надо было индексное поле по которому сортируется добавить в match
Ну и отлично. Дерзайте. Кстати у монгги есть халявные курсы, правда на англицком, но прикольно.

Vasiliy
10.08.2018
11:15:54
у нас только часть с отчётами в монге, остальное постгре

а можете ссылку кинуть?

Игорь
10.08.2018
11:30:53
Вопрос. Настроил ротацию логов через logrotate.d

конфиг /var/log/mongodb/*.log { daily rotate 30 compress dateext missingok notifempty sharedscripts postrotate /bin/kill -SIGUSR1 `cat /var/lib/mongodb/mongod.lock 2> /dev/null` 2> /dev/null || true endscript }

при его запуске монго падает

Google
Stanislav
10.08.2018
11:48:51
Может кто-нибудь знает, есть ли какие-то книги/курсы по бигдате в монге? типа, как жить с 100трлн документов и как делать по ним аналитику

есть конечно подозрение, что монга вообще не для этого, но хочется посмотреть на попытки и во что упираются такие системы

AstraSerg
10.08.2018
11:50:13
а можете ссылку кинуть?
Да, конечно: https://university.mongodb.com/

Предложение типа rm -rf / : запишите туда 1 :))))

только не в проде :)

Joseph
10.08.2018
11:54:39
db.eval((queueId = "5b6cf99c0026bf6c948b3663", operationId = -1, skip = 0) => { const queueParrent = db.queues .find({ parent: { $exists: true } }) .populate('document', 'uid') .sort({ updated: -1 }); var filtred = queueParrent.filter(el => ( String(el.parent.queue) === queueId) && (Number(operationId) + 1 === el.parent.operationId)); var statistic = {}; filtred.forEach((el) => { statistic[el.status] = !statistic[el.status] ? 1 : statistic[el.status] + 1; }); var lengthSubQueue = filtred.length; filtred = filtred.slice(skip, skip + 10); console.log(1111111); console.log(filtred, lengthSubQueue, statistic); return { arr: filtred, lengthSubQueue, statistic }; }); Не могу понять почему она ретурнит не значения а саму функцию

Игорь
10.08.2018
11:54:54
AstraSerg
10.08.2018
11:55:17
смотрите: kill принимает 2 параметра: тип сигнала и номер процесса, кому его послать. Номер процесса обычно находится в файле с расширением .pid а у вас .lock почему-то

Игорь
10.08.2018
11:58:03
а вообще просто выставления db.adminCommand( { logRotate : 1 } ) достаточно для ротации логов? Я чет читал, читал, но так и не понял, нужнен ли еще этот самый logrotate.d

или прописав командку в моного будет достаточно

AstraSerg
10.08.2018
11:59:58
Joseph
10.08.2018
12:03:01
А точно не выполняется? Может просто выводит что собирается делать?
Вот что это чудо мне возвращает { "code": "(queueId, operationId, skip = 0) => {\n const queueParrent = db.queues\n .find({ parent: { $exists: true } })\n .populate('document', 'uid')\n .sort({ updated: -1 });\n let filtred = queueParrent.filter(el => (\n String(el.parent.queue) === queueId) &&\n (Number(operationId) + 1 === el.parent.operationId));\n const statistic = {};\n filtred.forEach((el) => {\n statistic[el.status] = !statistic[el.status] ? 1 : statistic[el.status] + 1;\n });\n const lengthSubQueue = filtred.length;\n filtred = filtred.slice(skip, skip + 10); // 10 - limit\n return { arr: filtred, lengthSubQueue, statistic };\n }" }

Собственно ее ретурн почему то

?

Joseph
10.08.2018
12:22:41
AstraSerg
10.08.2018
12:41:17
вот это отработало
А изначальный почему не отрабатывает? Вы его писали или скопипастили где-то?

Google
Joseph
10.08.2018
12:48:37
>Вы его писали или скопипастили где-то? То что я кинул это моя хранимка

Vasiliy
10.08.2018
12:57:39
так, сегодня я лидирую по вопросам

{ "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "gpus" : { "code" : "....", "temperature" : 57 } } { "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "gpus" : { "code" : "GPU-...", "temperature" : "50" } } ... как мне вытащить code и temperature на уровень выше?

это после unwind стадии

Vasiliy
10.08.2018
13:01:31
мне бы желательно чтобы результатом следующего стейджа было { "created_at" : "2018-08-10T12:56:28.758060Z", "rig_session_id" : 2304, "code" : "GPU-...", "temperature" : "50" }

Admin
ERROR: S client not available

Vasiliy
10.08.2018
13:04:36
так прожект же вроде только контроллирует что показывать а что нет, не?

AstraSerg
10.08.2018
13:06:34
да, ну и название можно другое сделать: <field>: <expression> Adds a new field or resets the value of an existing field. https://docs.mongodb.com/manual/reference/operator/aggregation/project/

Vasiliy
10.08.2018
13:06:35
я пока дошёл до такого

db.reports.aggregate([ {$match: {rig_session_id: {$in: [2304, 2255]}, created_at: {$gte: '2018-08-10T10:39:04'}}}, {$sort: {created_at: -1}}, {$group: {_id: '$rig_session_id', last_report: {$first: '$$ROOT'}}}, {$project: {last_report: {created_at: 1, rig_session_id: 1, 'gpus': {code: 1, temperature: 1}}}}, {$replaceRoot: {newRoot: '$last_report'}}, {$unwind: '$gpus'} ]);

а, понял, через $ нотацию

блин, офигенски, так можно же всю логику в тупо запросы вытащить

AstraSerg
10.08.2018
13:13:37
Нп ердпоследнем стейдже вместо 'gpus': {code: 1, temperature: 1} сделайте: gpus_code: '$gpus.code', gpus_temperature: '$gpus.temperature' Поясннения: https://docs.mongodb.com/manual/reference/operator/aggregation/project/#include-computed-fields

Vasiliy
10.08.2018
13:14:21
да, собственно почти так и сделал {$project: {rig_session_id: 1, code: '$gpus.code', temperature: '$gpus.temperature'}}

AstraSerg
10.08.2018
13:14:51
>Вы его писали или скопипастили где-то? То что я кинул это моя хранимка
По поводу хранимок вот древняя статья есть http://dirolf.com/2010/04/05/stored-javascript-in-mongodb-and-pymongo.html но хранимки - это не тру вей. БД должна данные хранить, а не логику, ИМХО.

Google
Joseph
10.08.2018
13:17:53
AstraSerg
10.08.2018
13:18:24
M
10.08.2018
13:37:49
Ребята подскажите а ктото логи mongo собирает и пишет в еластик ?

AstraSerg
10.08.2018
13:45:11
M
10.08.2018
13:47:13
Запросики у вас... Логи демона или oplog?
ну oplog интересней (поэтому пока на нем можно остановиться) , демона тоже интересно

AstraSerg
10.08.2018
13:48:22
M
10.08.2018
13:48:28
вообще задача больше как понимать что происходит с базой , кто и что с ней делает

Vasiliy
10.08.2018
13:49:18
AstraSerg
10.08.2018
13:50:19
вообще задача больше как понимать что происходит с базой , кто и что с ней делает
А, мониторинг, это другое дело, во например экспортер для прометеуса: https://github.com/dcu/mongodb_exporter

Vasiliy
10.08.2018
13:53:04
хотелось бы одним запросом всё достать

AstraSerg
10.08.2018
13:53:52
хотелось бы одним запросом всё достать
Да, но достать же в приложение. Желательно сделать это в приложении

Vasiliy
10.08.2018
13:54:41
а почему так?

AstraSerg
10.08.2018
14:00:55
а почему так?
На мой взгляд это уже обработка данных, которая не задача БД. Но если настаиваете то можно конвертировать: https://docs.mongodb.com/manual/reference/operator/aggregation/convert/#exp._S_convert

Vasiliy
10.08.2018
14:12:06
у меня 3.6 монга

AstraSerg
10.08.2018
14:19:17
у меня 3.6 монга
Я не сталкивался и не ищется чёт...

Khramov
10.08.2018
14:38:16
Привет. У меня к вам вопрос по монге :) Есть отдельная однонодавая монга и есть replicaset отдельно из 3 нод. Я на отдельной однонодовой монге заинитил rs, и хочу как-то посинкать данные между ними. Получается, существующий rs из 3 нод со своим мастером я должен подключить как слейвы к однонодовой. Подскажите, как правильно это сделать? Сейчас сижу, читаю доку, но чет тяжело идет

Constantin
10.08.2018
15:05:23
На репликасете из 3 нод уже что-то есть? Или он пока пустой? Остановка базы допускается?

Khramov
10.08.2018
15:11:20
Остановка базы которая из 3 нод да, которая из 1 ноды - желательно нет,это прод, нанадолго можно, если это необходимо в рс из 3 нод уже есть данные, желательно их сохранить, но если такой возможности нет - данные из однонодовой монги важнее

Страница 285 из 342