Anonymous
chat_id
lang
menu
Anonymous
Пока что 4 документа в таблице
Anonymous
И то так медленно
Ilya
что то не реальное, это запрос в консоли монги или с клиента? но даже для сетевых задержек какая то жесть
S
Askhat
Oleg
Всем привет. Почитал историю канала про WriteConflict's в транзакциях. Пытаюсь написать такой код, чтобы он умел много concurrency транзакций обрабатывать без отмен транзакций. Нашел метод session.with_transaction который первым аргументом принимает функцию-callback . https://docs.mongodb.com/manual/core/transactions/#retry-transaction
Работает если параллельно пускаю немного транзакций ~3-5. Если пускать больше транзакций параллельно, то происходит странное: код заверщается без ошибок, но не все документы пишутся в БД. Есть у кого опыт concurrency транзакций в монге?
yopp
yopp
просто потому что любая борьба за общий ресурс не может быть concurrent, так как ресурс один, а акторов много
yopp
абстрактно, у вас есть следующие инструменты в порядке уменьшения производительности на write workload:
— immutable data / insert only
— single document / atomic updates
— multi document / transactions
yopp
insert only единственное по настоящему concurrent решение
yopp
если вы подробнее расскажите о своём кейсе, то можно попробовать поискать варианты как решить вашу задачу без транзакций
Nick
Nick
Никак, просто примерно столько жду
Тогда начните измерять каким либо инструментом с нормальным подсчетом времени. Плюс нужно явно разделить этапы отправки запроса в вашу систему от запроса в базу и мерять именно время общения с бд
Nick
Хотя бы банальное логирование времени с милисекундами
Nick
Oleg
сейчас пуляю по 300 транзакций, у которых есть один общий каунтер, который лочится базой и все ОК отрабатывает.
Oleg
session.with_transaction решает все вопросы, если правильно код написать.
yopp
yopp
Для счетчика есть $inc
yopp
Если он не Multidoc
Oleg
этот метод with_transaction на уровне драйвера все конфликты ловит и перезапускает callback
Egor
🤨
Mikhail
Ребят, посоветуйте, как шардированную монгу бекапить?
Mikhail
Я в доке смотрю, там какая-то дичь - отключить всех от монги, залочить запись и каждый шард монгодампом забекапить отдельно
Mikhail
А больше - никак?
Mikhail
...кроме снапшотов ФС и файлового бекапа самих датафайлов монги
yopp
А больше - никак?
Бесплатно, только снепшоты и mongodump.
За деньги atlas backups и ops manager
yopp
4.2.1 (Oct 18) ◦ 4.0.13 (Oct 19)
Хочешь выступить с докладом на митапе в Москве? Присылай тему!
• Плейграунд для запросов
• Документация
• Официальные курсы по MongoDB
Stable: 4.2.1 ◦ Bugfix: 4.0.13
Legacy: 3.6.14 (Aug 26) ◦ EOL: 3.4.23 (Sep 16, 💀 Jan ‘20)
По вопросам покупки Enterprise лицензии пишите @dd_bb
☠️: 3.2.21 (Dec ’18), 3.0.15 (May ’17)
yopp
4.2.1 released: https://docs.mongodb.com/manual/release-notes/4.2/#oct-18-2019
4.0.13 released: https://docs.mongodb.com/manual/release-notes/4.0/#oct-19-2019
CrusaderX
@dd_bb скажите, а по курсу, который был ранее, по монге, не будет видео? Платных или нет
Semeon
Многоуважаемый чат! Можете подсказать дизайнеру как правильно написать запрос для «Монги»? Я хочу написать запрос, который бы сортировал записи по дате и подсчитывал среднее значение поле. Вот пример: exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
{
// Сортировка записей
$match: {
Date: {
$gte: Math.round(new Date().getTime()/1000)+10800-604800
}
}},
{
// Агрегированией записей
$group: {
_id: "$_id",
LastTimeUpdate: { $last: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}},
{
// Удаление данных из объекта
$project: {
_id: 0, Date: 0, City: 0, Street: 0
}}
]).next(function(err, doc) {
cb(err, doc);
});
};
Semeon
Не работает ровным счётом всё. Подобный запрос возвращает объект, но поля не суммируются и кажется, выборка по дате не работает. Можете подсказать, где я не прав?
Semeon
{
"LastTimeUpdate": 1571438304,
"Temperature": 27.4,
"Pressure": 749.2
}
Такой объект возвращается
yopp
yopp
по дате ограничьте условие с двух сторон: $gte и $lt, если вы хотите выбрать за период
yopp
и по возможности используйте дату как Date объект, а не как число
Semeon
yopp
Semeon
yopp
плавающая точка где?
Semeon
плавающая точка где?
{
"LastTimeUpdate": 1571438875,
"Temperature": 27.33180555555555,
"Pressure": 748.9520833333333
}
В возвращаемом объекте
yopp
да
Semeon
Это фиксится сердствами «Монги» или мне это в JS пофиксить?
yopp
зависит от того что вы хотите «пофиксить»
yopp
округлить вы можете и в js и в монге (https://docs.mongodb.com/manual/reference/operator/aggregation/round/)
Semeon
О! Вроде бы то, что нужно! Спасибо! Сейчас изучу
Semeon
yopp
в этом случае округляйте на клиенте, в js
Semeon
Я хотел бы, что API возвращал числа с которыми не нужно производить никаких доп действий. Это критично, если я на беке посчитаю?
yopp
под клиентом я имею ввиду клиента с точки зрения монги
Semeon
Спасибо! Буду пробовать
yopp
Многоуважаемый чат! Можете подсказать дизайнеру как правильно написать запрос для «Монги»? Я хочу написать запрос, который бы сортировал записи по дате и подсчитывал среднее значение поле. Вот пример: exports.dailyAverages = function(cb) {
db.get().collection(config.collectionConnect).aggregate([
{
// Сортировка записей
$match: {
Date: {
$gte: Math.round(new Date().getTime()/1000)+10800-604800
}
}},
{
// Агрегированией записей
$group: {
_id: "$_id",
LastTimeUpdate: { $last: "$Date" },
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}},
{
// Удаление данных из объекта
$project: {
_id: 0, Date: 0, City: 0, Street: 0
}}
]).next(function(err, doc) {
cb(err, doc);
});
};
и вместо $last лучше использовать $max
Semeon
Semeon
Semeon
У меня получился такой запрос, но он почему-то не работает:
{ $match: { Date: { $gte: timeRange(604800), $lt: timeRange() }}},
{
$project:
{
_id: null,
Temperature: { $avg: "$Temperature" },
Pressure: { $avg: "$Pressure" }
}
},
{
$project:
{
_id: null,
Temperature: { $round: ["$Temperature", 2]},
Pressure: { $round: ["$Pressure", 2]}
}
},
// Агрегированией записей в объект
{
$group:
{
_id: null,
LastTimeUpdate: { $max: "$Date" },
Temperature: "$Temperature",
Pressure: "$Pressure"
}
},
// Удаление лишних данных из объекта
{ $project: { _id: 0, Date: 0, City: 0, Street: 0 }}
Semeon
Я пробовал разные варианты, но ни один не срабатывает. Что я не так делаю?
Paul
Paul
подскажете GUI клиент для монгодб на винду?
Paul
запущено локально
Bohdan
Robo3t
Anonymous
Сергей
Ребят, привет
Подскажите, что делаю не так?
Сергей
Vova
Нужно 1 goal достать по условию?
Сергей
Vova
Почитай про $elemMatch
Сергей
Vova
Показывай как пробовал
Сергей
Сергей