Max
что откуда коннектится, где работает, где монга, чем коннектится + логи побольше
Обычный монгуз. Логов нету. Не вижу по крайней мере. Конфигурация подключения: const options = { reconnectTries: 30, reconnectInterval: 500, poolSize: Number(process.env.DB_POOLSIZE) || 1, socketTimeoutMS: 30000, keepAlive: true, bufferCommands: false, bufferMaxEntries: 0, };
yopp
https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/
Max
https://docs.atlas.mongodb.com/best-practices-connecting-to-aws-lambda/
Спасибо, уже видел. У меня +/- так и организован конекшен. Только вынес его в отдельный модуль
yopp
соединение точно за пределами обработчика?
yopp
ошибка происходит в момент выполнениях хендлера?
Max
Сорри, с телефона. Домой еду
yopp
gist.github.com или оберните в три тика (```)
Max
gist.github.com или оберните в три тика (```)
https://gist.github.com/MaxVinogradov/4f32cda8c017d97d8c20ad77cb511c7e
Max
На реальных тест кейсах, - не видел( узнал про это только когда sentry подключил
Max
ошибка происходит в момент выполнениях хендлера?
Могу предложить что да, но опять таки - не наблюдаю при работе
yopp
эм
yopp
ну вы на стектрейс посмотрите
yopp
callbackWaitsForEmptyEventLoop = false стоит?
yopp
там где-то у них в пути потерялась проверка на cachedDb.serverConfig.isConnected
yopp
у вас в isConnected не состояние хранится, а указатель на монго клиента, поменяйте имя
Max
стектрейс - https://gist.github.com/MaxVinogradov/f2b8d802be15974ed9dfcc9fa7507963
Max
у вас в isConnected не состояние хранится, а указатель на монго клиента, поменяйте имя
чуть-чуть не понял - isConnected = db.connections[0].readyState; - оно же возвражает кажись 0/1 ... или я ошибаюсь?
yopp
тогда вы не кешируете соединение
yopp
я не заметил readyState
yopp
вам нужно мемоизировать соединение function connectToDatabase (uri) { console.log('=> connect to database'); if (cachedDb) { console.log('=> using cached database instance'); return Promise.resolve(cachedDb); } return MongoClient.connect(uri) .then(db => { cachedDb = db; return cachedDb; }); }
s0menickname
кек лол
прод? тысячи пользователей? перезапускать иногда надо
Andrew
Как мне с помощью mongoose искать документ в коллекции если в этой коллекции находятся разные модели?
Andrew
поиск по id необходим
Andrew
мне наверное надо было сделать базовую коллекцию и от нее наследоваться как то?
Andrew
mongoose descriminators поковыряй)
сработало, спасибо
Max
чот как-то больно
yopp
Ну тогда ¯\_(ツ)_/¯
yopp
Добро пожаловать в serverless адок. Отладка непредсказуемой лямбды это не к монге. Покупайте амазоновский суппорт за бешеные тысячи и разбирайтесь с ними. Можете для успокоения души проверить что это не монга разрывает соединение.
yopp
Я бы проверил в той конфигурации которая у монги, но если у вас монгус это будет непросто.
Max
Я бы проверил в той конфигурации которая у монги, но если у вас монгус это будет непросто.
а как это проверить то? если что - вот мой вопрос на гитхабе - https://stackoverflow.com/questions/54226024/aws-lambda-node-js-v-8-10-mongoose-mongonetworkerror-connection-to-db-tim . буду рад если подымите его немного..
Max
рассписал уже как мог. видел похожие, но на них никто так и не ответил
yopp
вы кешируете состояние соединение, а не соединение с базой
yopp
тот факт что вам оттуда возвращают true ничего не значит
Max
тот факт что вам оттуда возвращают true ничего не значит
по доке же смотрел - там 1-ца возвращается только если соединение активно. или я в чём-то жёстко туплю?
yopp
if (isConnected) { return resolve(); }
yopp
т.е. вы один раз установили это значнение в 1 и всё
yopp
реального состояния содениения вы уже никогда больше не получите
yopp
если соединение после вашей первой проверки будет разорвано, то isConnected так и останется 1
yopp
но я плохо в js разбираюсь
yopp
без понятия как контексты в промисах работают
Max
если соединение после вашей первой проверки будет разорвано, то isConnected так и останется 1
А ведь точно) спасибо, уже завтра попробую. А чего его может разорвать то?
Max
Если контейнер лямбды погас - подыматся новый
Max
Там новый конекшен будет
Constantin
Ребят, можете подсказать, если монга уже запущена, можно как-то посмотреть, какие запросы сейчас в нее ломятся
Constantin
Есть момент, что не можем найти очевидно очень плохой запрос
Anonymous
db.currentOp()
Constantin
Большое спасибо
Andrew
Всем привет, какой способ считаеться оптимальным при сетапе шардированного кластера с реплика сетами при выборе метода бекапа для этого кластера? Рассматриваем теоретический вариант, когда данных очень много (в теории предпологаеться больше 10Tb) Или такие данные уже никто не бекапит?
yopp
https://docs.mongodb.com/manual/administration/backup-sharded-clusters/
yopp
См filesystem snapshots. Precision In this procedure, you will stop the cluster balancer and take a backup up of the config database, and then take backups of each shard in the cluster using a file-system snapshot tool. If you need an exact moment-in-time snapshot of the system, you will need to stop all application writes before taking the file system snapshots; otherwise the snapshot will only approximate a moment in time. For approximate point-in-time snapshots, you can minimize the impact on the cluster by taking the backup from a secondary member of each replica set shard.
Andrew
Надо останавливать кластер, чтобы было все синхронизоровано при выполнение снепшотов (
yopp
Если вы научите ваше приложение ставить запросы на «паузу» на небольшой промежуток времени, необходимый вашей фс чтоб сделать снепшот, то будет нетрудно
yopp
Нет, кластер не надо трогать. Надо останавливать только записи
Andrew
Да, я чуть не верно выразился
yopp
И то, их можно «придержать» со стороны вашего приложения. Не понимаю почему монга не поддерживает это из коробки
yopp
Сделали бы управляемые write lock, чтоб можно тормозить записи в базу/коллекцию
yopp
Очереди там уже и так есть
Andrew
Понял, спасибо за ответ
yopp
У вас сейчас много данных?
Andrew
сейчас вообще нет данных, идет выбор и построение будующей архитетектуры.
Roman
доброго дня! как $where: 'this.following > this.followers / 2' переписать в виде $expr?
Roman
или любым другим способом без $where
Roman
db.getCollection('profiles').count({ 'following': { '$gt': { '$divide': ['followers', 2] } } }) так не работает :(
Roman
а ну и не должно работать
Roman
я херню написал полнейшую
Roman
db.getCollection('profiles').count({ $expr: { $gt: ['$following', { $divide: ['$followers', 2] }] } });
Roman
я так понимаю, что вот
Roman
да?
Roman
проверил, да, спасибо!
Roman
самообразование