@MongoDBRussian

Страница 327 из 342
Gleb
08.10.2018
21:51:48
спасибо милый человек )

Alexander
08.10.2018
21:53:30
Нутак сначала ты ищешь совпадения, а только потом лимитишь и сортируешь. И на производительности тоже сказывается положительно

И да: match > limit > sort

В таком порядке

Google
Gleb
08.10.2018
21:54:14
да, но если не ставить sort первым, то он мне сортит уже получившейся аррей

Alexander
08.10.2018
21:54:23
А, точно

Gleb
08.10.2018
21:54:25
а мне месседжи нужно с конца

Alexander
08.10.2018
21:54:38
Дада

Лан, я споть

Gleb
08.10.2018
21:54:49
короче все пашет как надо ) спасибо

Alexander
08.10.2018
21:55:01
?

Maxim
09.10.2018
08:50:36
Привет! попробую ещё тут спросить:

mongoose.connection.on('connected', async () => { log.info(`Mongoose connected to ${process.env.DB_URI}`); const db = mongoose.connection; db.once('open', () => { const changeStream = db.collection('rides').watch(); changeStream.on('create', async () => console.log('!!!1')); changeStream.on('change', async () => console.log('!!!2')); }); }); подскажите плиз, почему при добавлении подписки на монгу у меня сервак начинает отвечать в 10-20 раз медленне

при чём екшены в этот момент не тригерятся - просто сам факт наличия подписки жутко тормозит сервер

AstraSerg
09.10.2018
09:04:27
Извините, но в терминах монги нет понятия "подписка".

Maxim
09.10.2018
09:06:13
Извините, но в терминах монги нет понятия "подписка".
буду знать, спасибо. ссылка на то что я называю подпиской

https://docs.mongodb.com/manual/changeStreams/

Google
AstraSerg
09.10.2018
09:08:44
А, стримы, это другое дело. Теперь ваш вопрос понятнее. То есть когда ваша апликуха подписывается на ченджстрим, начинаются тормоза?

AstraSerg
09.10.2018
09:09:41
А поток большой? Может так и должно быть?

Maxim
09.10.2018
09:09:57
А поток большой? Может так и должно быть?
нет - там событий не происходит вообще

А поток большой? Может так и должно быть?
да и рекордов мало в сумме - меньше 20

AstraSerg
09.10.2018
09:11:05
Так а что тромозит, если ничего не происходит?

Maxim
09.10.2018
09:11:41
любой запрос к монге теперь тормозит

AstraSerg
09.10.2018
09:14:57
А, так тормозят запросы к монге, а не апликуха? А какие именно запросы? Может это из-за write concern? https://docs.mongodb.com/manual/reference/write-concern/

AstraSerg
09.10.2018
09:17:05
там и документов штук по 20-40 в коллекциях
Очевидно, что это не связано с количеством документов

Maxim
09.10.2018
09:17:20
Очевидно, что это не связано с количеством документов
я понимаю. но увы не понимаю как лечить

AstraSerg
09.10.2018
09:19:47
Прежде всего нужно обратиться к логам. Повысьте уровень детализации если нужно https://docs.mongodb.com/manual/reference/method/db.setLogLevel/

Google
Maxim
09.10.2018
09:35:45
я по дефолту юзал один конекшен)

и стрим его блочил)

но в любом случае - спасибо!

ок, теперь когда агония прошла - может кто-то подскажет как рассчитать оптимальный размер коннекшенов в пуле?

Nick
09.10.2018
10:03:23
ок, теперь когда агония прошла - может кто-то подскажет как рассчитать оптимальный размер коннекшенов в пуле?
настариваете мониторинг, запускаете приложуху, даете нагрузку, смотрите упирается в количество коннектов, если да - увеличиваете, если нет то можно ненмого уменьшить и повторить

Nick
09.10.2018
11:19:56
когда разговор о пуле то мониторят приложение а не базу, а точнее использование пула. это уже надо искать конкретно к драйверу и пулу

Sergey
09.10.2018
12:15:20
Есть ли какой-нибудь способ безопасно удалить индекс из коллекции? Ну т. е. есть у меня индекс X, который я хочу удалить. Согласно статистике, он довольно активно используется, но, в теории, вместо него может использоваться другой индекс. Запросов разных много. Исчерпывающего списка их шейпов нет. Хочется удалить индекс X, но так, чтобы либо быстренько его вернуть, если что, либо достоверно убедившись, что сможем жить без него. Штуки вроде задизейбливания индексов в монге, насколько мне известно, нет. В кеше планов, насколько я понимаю, есть не все шейпы запросов.

AstraSerg
09.10.2018
12:56:06
Нет идей, кроме банального, собрать все типы запросов, попробовать на стенде и .т.п

Sergey
09.10.2018
13:33:54
подскажите пожалуйста, есть у меня массив данных цена и дата, я хочу сгрупировать этот массив по дням и подскачитать среднее значение цены

"priseGraph": [ { "uv": 3.8726395761729204, "date": "2018-10-09T13:01:13.536Z" }, { "uv": 3.873669297632242, "date": "2018-10-09T13:00:14.516Z" }, ]

массив выглядит вот так

вот кусок группировки

{ $group: { _id: "$token", marketCap: { $first: "$marketCap" }, wallets: { $first: "$wallets" }, investors: { $first: "$investors" }, price: { $first: "$price" }, priceNSU: { $first: "$priceNSU" }, priseArr: { $push: "$price" }, priseGraph: { $push: { uv: "$price", date: "$createdAt" } }, id: { $first: "$_id" } } },

мне ниже нужно еще одну группировку сделать?

Nick
09.10.2018
13:42:42
нужно группироват ьпо дате просто

если вам нужно среднее на срезе token-date то указываете их в _id, если нет, то то на чем нужен срез

Sergey
09.10.2018
13:46:48
да, мне нужен срез на токен

Nick
09.10.2018
13:50:53
тогда зачем вы спрашиваете как сделат ьего по дням?

Google
Nick
09.10.2018
13:51:14
у вас после этой агрегации уже не останется инфомрациии о дате

Joseph
09.10.2018
14:12:01
Вечер добрый , подскажите в чем может быть косяк, post hook на save не работает LogSchema.post('save', (doc) => { console.log('post save 2'); }); // вот собственно так создаю логи exports.creatLog = log => new LogModel(log).save();

Алексей
09.10.2018
14:18:54
Парни кто конектился к mlab. Такая проблема получается "failed to connect to server [ds247330.mlab.com:47330] on first connect [MongoNetworkError: connection 0 to ds247330.mlab.com:47330 timed out]", "stack": "MongoNetworkError: failed to connect to server [ds247330.mlab.com:47330] on first connect

AstraSerg
09.10.2018
17:25:02
telnet ds247330.mlab.com 47330 пройдет?

Oleg
09.10.2018
17:31:38
лучше не светить айпи с портами, логины/пароли и прочее :)

Mr_Babrums.bin
10.10.2018
08:36:16
Всем привет

У меня такая хрень: есть ну очень жирная база данных с кучей коллекций по 60к документов. Иногда необходимо целиком обновлять её, и как мне кажется самым быстрым способом было бы создание второй бд во время обновления а затем подмена основной на свежую с выпилом всех старых данных

Как бы вы такое реализовали?

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

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

Nick
10.10.2018
08:51:39
60к доков - не жирная база, если тебе дают дамп - то прост дроп старой - заливка новой. опять же если позволяется простой в работе бд

Sergey
10.10.2018
08:52:00
Если процент реально обновлённых документов невысок (цифра с потолка — меньше 10%), то стоит извлечь документ, сравнить и, если требуется, обновить. Идея с наливкой новой базы хорошая. Особенно если к базе идёт большое количество запросов от пользователей, т. к. массовая наливка однозначно повлияет на качество обслуживания чтений.

Mr_Babrums.bin
10.10.2018
08:52:26
вот хотелось бы не нарушать доступность. менять имена бд нельзя, это уже знаем

вдруг какая житейская хитрость есть

Nick
10.10.2018
08:52:55
вот вы и ответили на свой вопрос про - залить в новую бд, еслинельзя простой - нельзя новую бд

Mr_Babrums.bin
10.10.2018
08:53:22
костыльненько

Nick
10.10.2018
08:53:33
ваша задача - костыль

реально

Mr_Babrums.bin
10.10.2018
08:54:04
да не говори, реально жесть из 1999

Sergey
10.10.2018
08:54:34
вот вы и ответили на свой вопрос про - залить в новую бд, еслинельзя простой - нельзя новую бд
Почему нельзя-то? Пока наливаем новую, ходим в старую. Как перелили переключаемся на новую.

Google
Nick
10.10.2018
08:54:45
я такого еще нигде не видел

да не говори, реально жесть из 1999
а данные в таблицах меняюстя или они там только на чтение?

Nick
10.10.2018
08:55:46
тогда проще

Sergey
10.10.2018
08:56:02
а перключение мгновенное?
Нет, конечно. Но оно и не должно быть мгновенным для availability. Ну, при условии, что данные помимо переливки не модифицируются

Nick
10.10.2018
08:56:45
создаете у всех доков поле по типу updatedAt и загоняете новые данные и обновляя время заливки. потом удаляете все что старше времени начала заливки

Mr_Babrums.bin
10.10.2018
08:57:08
хмм...ну типа примерно понял. иметь 2 активных монгоклиента. каждый раз при обращении проверять есть ли там в коллекции хоть что-то. если коллекция пустая - переключаемся на второй монгоклиент

и так бесконеееееееееееееееееееееее

Nick
10.10.2018
08:57:45
создание новых проблем - это так себе решение текущей

Nick
10.10.2018
08:58:20
если у вас вдруг 4 монга и уже ест ьтранзакции, то это даже можно сделать атомарно

Mr_Babrums.bin
10.10.2018
08:58:36
только тогда не updatedAt а по обжектайди вычленять время создания

и всё что старше 1 минуты удалять к хренам

точно

Nick
10.10.2018
08:58:55
не используйте objectid кроме как id

забудьте что гдето там есть время

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