
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

Aws
09.10.2018
09:08:29

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

Maxim
09.10.2018
09:09:04
тормоза - Х10 - Х20 раз

Aws
09.10.2018
09:09:25

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

Maxim
09.10.2018
09:09:57

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/

Maxim
09.10.2018
09:15:52
и "джойнов" тоже нету - ни через монгуз ни через агрегейшен фреймворк

AstraSerg
09.10.2018
09:17:05

Maxim
09.10.2018
09:17:20

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

Maxim
09.10.2018
09:28:34

Google

Maxim
09.10.2018
09:35:45
я по дефолту юзал один конекшен)
и стрим его блочил)
но в любом случае - спасибо!
ок, теперь когда агония прошла - может кто-то подскажет как рассчитать оптимальный размер коннекшенов в пуле?

Nick
09.10.2018
10:03:23

Maxim
09.10.2018
11:11:03

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к документов. Иногда необходимо целиком обновлять её, и как мне кажется самым быстрым способом было бы создание второй бд во время обновления а затем подмена основной на свежую с выпилом всех старых данных
Как бы вы такое реализовали?
там вычленять каждый документ для проверки на признак обновления информации было бы слишком долго как по мне


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
я такого еще нигде не видел

Mr_Babrums.bin
10.10.2018
08:55:37

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
создание новых проблем - это так себе решение текущей

Mr_Babrums.bin
10.10.2018
08:57:49

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
забудьте что гдето там есть время