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/
yopp
соединение точно за пределами обработчика?
yopp
ошибка происходит в момент выполнениях хендлера?
Max
Сорри, с телефона. Домой еду
yopp
gist.github.com или оберните в три тика (```)
Max
На реальных тест кейсах, - не видел( узнал про это только когда sentry подключил
Max
yopp
эм
yopp
ну вы на стектрейс посмотрите
yopp
callbackWaitsForEmptyEventLoop = false стоит?
yopp
там где-то у них в пути потерялась проверка на cachedDb.serverConfig.isConnected
yopp
у вас в isConnected не состояние хранится, а указатель на монго клиента, поменяйте имя
Max
Max
стектрейс - https://gist.github.com/MaxVinogradov/f2b8d802be15974ed9dfcc9fa7507963
yopp
тогда вы не кешируете соединение
yopp
я не заметил readyState
s0menickname
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
мне наверное надо было сделать базовую коллекцию и от нее наследоваться как то?
Max
Max
Andrew
Max
Max
Max
чот как-то больно
yopp
Ну тогда ¯\_(ツ)_/¯
yopp
Добро пожаловать в serverless адок. Отладка непредсказуемой лямбды это не к монге. Покупайте амазоновский суппорт за бешеные тысячи и разбирайтесь с ними. Можете для успокоения души проверить что это не монга разрывает соединение.
yopp
Я бы проверил в той конфигурации которая у монги, но если у вас монгус это будет непросто.
Max
рассписал уже как мог. видел похожие, но на них никто так и не ответил
yopp
вы кешируете состояние соединение, а не соединение с базой
yopp
тот факт что вам оттуда возвращают true ничего не значит
yopp
if (isConnected) {
return resolve();
}
yopp
т.е. вы один раз установили это значнение в 1 и всё
yopp
реального состояния содениения вы уже никогда больше не получите
yopp
если соединение после вашей первой проверки будет разорвано, то isConnected так и останется 1
yopp
но я плохо в js разбираюсь
yopp
без понятия как контексты в промисах работают
Max
Max
Если контейнер лямбды погас - подыматся новый
Max
Там новый конекшен будет
Constantin
Ребят, можете подсказать, если монга уже запущена, можно как-то посмотреть, какие запросы сейчас в нее ломятся
Constantin
Есть момент, что не можем найти очевидно очень плохой запрос
Anonymous
db.currentOp()
Constantin
Большое спасибо
Andrew
Всем привет, какой способ считаеться оптимальным при сетапе шардированного кластера с реплика сетами при выборе метода бекапа для этого кластера? Рассматриваем теоретический вариант, когда данных очень много (в теории предпологаеться больше 10Tb) Или такие данные уже никто не бекапит?
yopp
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
самообразование
yopp