@MongoDBRussian

Страница 292 из 342
М
22.08.2018
15:29:52
Если документов не так много, вы можете попробовать собрать их массив поддокументов и дальше использовать $position
про это прочитал, но изменение позиции документов так реализовать будет невозможно

спасибо!

yopp
22.08.2018
15:30:16
у документа нет позиции в коллекции

М
22.08.2018
15:39:41
подскажите еще такой вопрос: как можно изменить поле с помощью $set, если заранее название поля неизвестно, но передается в функцию аргументов ?

Google
М
22.08.2018
15:40:34
Categories.update({ _id: id }, { $set: { field: value, }, }); то есть тут нужно изменить не поле field, а поле с названием из переменной field

судя по всему вот так: const setObject = {}; setObject[field] = value; Categories.update({ _id: id }, { $set: setObject, });

AstraSerg
22.08.2018
16:38:20
судя по всему вот так: const setObject = {}; setObject[field] = value; Categories.update({ _id: id }, { $set: setObject, });
Да, можно так, но нетипичная зада,а какая-то. Архитектуру не хотите сменить?

М
22.08.2018
16:58:03
Да, можно так, но нетипичная зада,а какая-то. Архитектуру не хотите сменить?
А какой ещё выход, если нужно написать методы для изменения каждого поля (name, desc, path, color, size, owner)? Писать по методу на каждое поле это получается большое количество однотипных методов

При большом количестве полей и бд имеем много ненужной рутинной работы

AstraSerg
22.08.2018
17:02:15
А какой ещё выход, если нужно написать методы для изменения каждого поля (name, desc, path, color, size, owner)? Писать по методу на каждое поле это получается большое количество однотипных методов
Про методы не скажу, про вашу архитектуру мне ничего не известно. Но менять назания полей - нетипичично. Можно же сделать название нейтральное и менять валью.

Constantin
22.08.2018
17:03:29
Ребят, всем привет! А что за ересь, mongoose ругается в последней версии на: findAndModify, remove, update — что методы deprecated, и будт удалены. Есть предпосылки со стороны MongoDB?

AstraSerg
22.08.2018
17:13:56
Constantin
22.08.2018
17:22:29
Ну ещё не правильно

Монгус раньше времени панику поднял. Пока в драйвере официальном не сделали все изменения. Как сделают да, все будет как по новой спеке, и старые методы отомрут

Так ы итоге как у вас в js правильно теперь?
updateOne и updateMany, например, вместо update deleteOne и deleteMany вместо remove

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

Google
М
22.08.2018
18:34:13
Про методы не скажу, про вашу архитектуру мне ничего не известно. Но менять назания полей - нетипичично. Можно же сделать название нейтральное и менять валью.
Я имею в виду, что нужно менять разные поля у документа. И то есть можно написать отдельный метод для изменения каждого поля и передавать ему значение поля, а можно написать единый метод для изменения документа и передавать ему как аргумент поле и значение. Для этого нужно уметь подставлять данные из аргумента в поле внутри $set

Или где я туплю?

Названия полей остаются неизменными

Алексей
22.08.2018
19:24:11
господа а можно как то ускорить начальный синк ? без разврата с rsync и таким ?

Алексей
22.08.2018
19:33:09
ну как то странно с чудесами. я вижу что упирается примерно в ядро.

а это довольно не то что я ожидаю увидеть

я конечно понимаю оплог и там всё такое но почему нельзя тащить коллекции в паралель тут логика пасует

лучший ответ — потому что не написали

Serhii
22.08.2018
20:25:14
Подскажите пожалуйста почему на такой коннект к монге const MongoClient = require('mongodb').MongoClient; const assert = require('assert'); // Connection URL const url = 'mongodb://localhost:27017'; MongoClient.connect(url, function(err, client) { if(!err) { console.log('connect'); } }); выдает такую ошибку, хотя по доке это вроде бы стандартный коннект DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect заранее спасибо

yopp
22.08.2018
21:25:22
Но если хочется прямо очень быстро, то быстрее переноса снепшотов ничего не придумали

m
23.08.2018
05:55:26
Привет, подскажите, если используешь монгус, можно как-нибудь ему сказать, что вот эта схема может быть любой, и сохранять что хочешь ?

Google
Serhii
23.08.2018
06:30:56
Передайте объект опций и укажите что он хочет
Делал, по таймауту падает через несколько секунд, хотя монга запущена в соседней вкладке

Constantin
23.08.2018
06:47:42
Почему падает сказать не могу

Serhii
23.08.2018
06:48:36
Все равно спасибо)

Alex
23.08.2018
08:48:52
Приветы Можете подсказать, есть ли человечий способ профайлингом найти не самые медленные запросы, а самые частые?

Alex
23.08.2018
08:55:20
New Relic очень сильно дорогой. Но классный, да

yopp
23.08.2018
08:55:57
Можно на коленке, включив slowms: 0 и читать system.profile через tailable cursor

Alex
23.08.2018
08:55:58
За вивид спасибо - гляну

yopp
23.08.2018
08:56:21
вивид дороже ньюрелика

Alex
23.08.2018
08:57:05
Можно на коленке, включив slowms: 0 и читать system.profile через tailable cursor
Да, я так и собирался делать, но надеялся что есть что-то вроде человечьего профайлера с распределением частоты запросов.

Ладно, и на том спасибо ?

yopp
23.08.2018
08:57:24
https://github.com/mrsarm/mongotail

Alex
23.08.2018
08:58:57
https://github.com/mrsarm/mongotail
интересная штука. Спасибо, гляну

AstraSerg
23.08.2018
08:59:18
https://github.com/mrsarm/mongotail
Спасибо, интересно глянуть :)

Google
yopp
23.08.2018
08:59:41
и вот https://github.com/heewa/mongotime

но у mongotime кажется нет возможности показать запрос

и ещё такой момент: из запроса желательно отфильтровывать значения, оставляя только ключи. очень часто бывает, что есть запросы, например «последние сообщения», которые не такие медленные чтоб попасть в профайлер, но их очень много и у них постоянно меняется ключ в запросе converstations.find({user_id: xyz}).sort({last_message_at: -1})

в таких запроса значения xyz или -1 лучше отбросить, ключи отсорировать и считать статистику по таким вот нормализованным отпечаткам, например сразу в нотации команд: {find: ‘conversations’, filter: {user_id: nil}, sort: {last_message_at: nil}}. очень часто, такие запросы и надо оптимизировать

Admin
ERROR: S client not available

Alex
23.08.2018
09:16:32
Ну вот в общем да. У меня сейчас затык в том, что инстанс (он один, не бейте ногами), фризится иногда. Профайлер показывает что медленных запросов нет. Значит либо проблема ниже с дисковым IO (это потом будем изучать), либо летит жирная пачка мелких и коротких запросов. И исходя из того, как работает приложение, которое базу использует, скорее второе чем первое

yopp
23.08.2018
09:18:42
начните с https://www.percona.com/software/database-tools/percona-monitoring-and-management

а, туда и query analytics завезли

ну вот и решение :)

https://pmmdemo.percona.com/graph/d/1Xwy8CKmz/_pmm-query-analytics?from=now-12h&to=now&orgId=1&var-host=mongocnf1wt&queryID=adcdc4d03a8376dc3c71f9079b7c3df1&type=mongo

Alex
23.08.2018
09:23:43
Оно еще и бесплатное, чтоли ?)

AstraSerg
23.08.2018
09:24:11
начните с https://www.percona.com/software/database-tools/percona-monitoring-and-management
оооооооооооооо, сколько графичков!!! беру!!

yopp
23.08.2018
09:24:27
оооооооооооооо, сколько графичков!!! беру!!
много графиков это _очень_ плохо

проблема всех графиков в том, что они бесполезны без человека который их умеет читать

как кардиограмма

Alex
23.08.2018
09:25:31
да
огонь ?

Alex
23.08.2018
09:36:34
А существуют какие-то "нормальные" значения для количества одновременных команд в монге?

yopp
23.08.2018
09:37:30
нет

Google
Alex
23.08.2018
09:37:58
Понятно, что от железа зависит.

yopp
23.08.2018
09:39:45
вам стоит начать с понимания что такое «фриз»

это очень абстрактный симптом

более того, который который может быть совершенно не связан с монгой. например при включеном tls и достаточно частой аутентификации, в системе может закончится энтропия и хендшейк при установке соединения будет блокироваться до момента пока пул энтропии достаточно не наполнится, а это могут быть минуты

Alex
23.08.2018
09:50:01
вам стоит начать с понимания что такое «фриз»
а вот я и пытаюсь понять. api-сервер иногда залипает на минуты. Я по нему прошёлся профайлером - с ним всё в относительном порядке. Глянул после этого в бесплатный new relic - он говорит, что база отвечает очень долго в моменты залипания. Вот теперь пытаюсь понять, что в такие моменты происходит с базой. Печаль в том, что это происходит в разное время и в разных местах. Рабочие версии следующие: - приложение иногда извлекает больше данных чем нужно, но быстрыми маленькими запросам по id. Однако в некоторых случаях их может быть очень много. Соответственно если это так, то хотелось бы увидеть, что в базу ушла условная тысяча запросов вот такого "сорта". Ну и соответственно обратно идти в приложение, и делать так, чтобы запросов было меньше. Сразу идти нельзя, потому что таких потенциальных мест довольно много, и все их не поправить за раз. - что-то не так с дисковым IO. Такое уже было на амазоне у нас, но правда на инстансе поменьше. Но тогда всё было характерно видно на графиках. Сейчас - нет. А tls для хендшейка с базой не используется - база с приложением на одном инстансе стоят.

Constantin
23.08.2018
09:51:41
а вот я и пытаюсь понять. api-сервер иногда залипает на минуты. Я по нему прошёлся профайлером - с ним всё в относительном порядке. Глянул после этого в бесплатный new relic - он говорит, что база отвечает очень долго в моменты залипания. Вот теперь пытаюсь понять, что в такие моменты происходит с базой. Печаль в том, что это происходит в разное время и в разных местах. Рабочие версии следующие: - приложение иногда извлекает больше данных чем нужно, но быстрыми маленькими запросам по id. Однако в некоторых случаях их может быть очень много. Соответственно если это так, то хотелось бы увидеть, что в базу ушла условная тысяча запросов вот такого "сорта". Ну и соответственно обратно идти в приложение, и делать так, чтобы запросов было меньше. Сразу идти нельзя, потому что таких потенциальных мест довольно много, и все их не поправить за раз. - что-то не так с дисковым IO. Такое уже было на амазоне у нас, но правда на инстансе поменьше. Но тогда всё было характерно видно на графиках. Сейчас - нет. А tls для хендшейка с базой не используется - база с приложением на одном инстансе стоят.
У вас репликасет?

yopp
23.08.2018
09:52:08
а вот я и пытаюсь понять. api-сервер иногда залипает на минуты. Я по нему прошёлся профайлером - с ним всё в относительном порядке. Глянул после этого в бесплатный new relic - он говорит, что база отвечает очень долго в моменты залипания. Вот теперь пытаюсь понять, что в такие моменты происходит с базой. Печаль в том, что это происходит в разное время и в разных местах. Рабочие версии следующие: - приложение иногда извлекает больше данных чем нужно, но быстрыми маленькими запросам по id. Однако в некоторых случаях их может быть очень много. Соответственно если это так, то хотелось бы увидеть, что в базу ушла условная тысяча запросов вот такого "сорта". Ну и соответственно обратно идти в приложение, и делать так, чтобы запросов было меньше. Сразу идти нельзя, потому что таких потенциальных мест довольно много, и все их не поправить за раз. - что-то не так с дисковым IO. Такое уже было на амазоне у нас, но правда на инстансе поменьше. Но тогда всё было характерно видно на графиках. Сейчас - нет. А tls для хендшейка с базой не используется - база с приложением на одном инстансе стоят.
начините с observability. это всё гадание на кофейной гуще, которое вас никуда не приведёт

собирайте метрики с инстанса и с сервера базы

смотрите что происходит в момент отказа

Alex
23.08.2018
09:52:28
У вас репликасет?
Нет. Дело происходит на предрелизной платформе - там всё живёт в одном AWS инстансе

Constantin
23.08.2018
09:53:16
Нет. Дело происходит на предрелизной платформе - там всё живёт в одном AWS инстансе
Я бы еще посмотрел на пул коннекшенов, иногда фризится на стороне приложения — когда пропускной способности открытых коннектоы не хватает.

yopp
23.08.2018
09:56:17

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