Александр
Aleksey
привет, как бы понять сколько записей продолбалось после аварийного отключения примари? хочу сделать метрику sli по дюрабилити данных. думаю что для этого подойдет мониторинг расхождения колва записей между примари и секондари.
yopp
Aleksey
yopp
если ты про rollback, то открыть роллбэк и прочитать сколько документов туда свалилось
Александр
Aleksey
наиболее простой вариант как мне кажется. но буду рад другим варианам определний
Александр
yopp
вобщем-то вы так и сделали
Aleksey
Aleksey
я думал какую то дельту между транзакшен ид мониторить между мастером и слейвом
yopp
можно вместо перечисления то можно использовать $$ROOT и сложить в поле doc
Aleksey
но такого я не знаю
yopp
Александр
yopp
yopp
роллбэк это совсем выпавшие данные
yopp
т.е. non durable
Александр
yopp
для них нет никаких метрик
yopp
Есть пример с Root ?
https://docs.mongodb.com/manual/reference/operator/aggregation/group/#group-documents-by-author
Aleksey
а в чём смысл?
sli метрика, которая покажет "сохранность" данных в базе
Aleksey
yopp
ну тоесть единственное что с роллбэком можно сделать, это открыть bson файлы и посчитать сколько там документов
yopp
больше никаких вариантов нет :)
Aleksey
а лаг между примари и секондари в чем измеряется в секундах или транзакциях ?
Aleksey
нет под руками монги
yopp
В секундах. Но лаг это не потерянные данные
yopp
Как только секондари вернётся в кластер он дотянет данные
Aleksey
однако если посчитать что мастер упал в этот момент то вот сколько событий продолбали.
Aleksey
ладно видимо нужен другой вариант
yopp
а роллбэк запишет в dbpath
yopp
и дальше дотянет данные
Aleksey
да. именно это я называю продолбали
yopp
Ну вот, а я тебе объясняю что для этого нет метрики :)
Aleksey
их можно подтянуть но вероятно не всегда полезно
yopp
С появлением majority write concern, это проблема приложения, что оно потеряло данные
yopp
значит они были не так нужны
yopp
Т.е. там где терять данные можно, там w: 1 например. А там где нельзя majority. И пока оно по большинству в кластере не раскатается, клиент не получит ack
Aleksey
медленно это
Aleksey
ладно это другой вопрос
yopp
Гарантии всегда дорого и медленно
Aleksey
хорошо, есть ли варианты как измерить по другому что
Once a transaction has been committed, it will remain so.
Alexander
yopp
Если ты хочешь мерять сколько документов роллбечнулось, я ещё раз подчеркну, только читать файл :)
yopp
Ну тоесть других вариантов нет совсем
Александр
yopp
Я к тому что вам не обязательно перечислять все поля. Вы можете просто сделать $last/$first: $$ROOT (зависит от порядка сортировки)
Александр
Александр
Александр
Aleksey
yopp
а в чём сложность читать корректный источник информации, а не синтетическую некорректную метрику?
Aleksey
да нет сложности. ты просто про анализ а не про мониторинг. ну и ролбек это одна из ситуаций.
yopp
роллбэк это в принципе единственная ситуация при которой монга поднимется после отказа
yopp
я про мониторинг и говорю: у тебя есть rbid, на который надо повесить сингал
yopp
если тебе нужно мониторить сколько откатилось, то разбирать файл и считать, потому что роллбэки не отображаются в метриках
yopp
возможно в логе где-то будет, можно попробовать оттуда вытащить
Александр
yopp
yopp
это pipeline stage
yopp
Александр
yopp
а last где ?
[
{ $sort: { startTime: 1, } },
{ $group:
{
_id: "$userAdName",
doc: {$last: "$$ROOT"}
}
},
{
$replaceRoot: {newRoot: "$doc" }
}
]
Александр
yopp
это произвольное имя аттрибута
yopp
вы вместо doc можете любое удобное имя использовать, главное его потом в newRoot поменять
Aleksey
yopp
если j: true не стоит, а монга упала в момент когда движок не успел записать данные на диск, то да, конечно. но я тебе почему и говорю что твой таймштамп тебе тоже ничего не скажет, потому что с вероятнюсть (n-1)/n монга упадёт после него :)
yopp
где n количесто документов в интервале между таймштампами
yopp
ну тоесть в принципе, если операция in-flight, узнать что она недолетела до диска можно только повысив уровень гарантий
Александр
yopp
ни со стороны клиента, так как при низком уровне гарантий он получит ack, ни со стороны монги, так как узнать что что-то потерялось без persistency in-flight состояний невозможно чисто физически
Aleksey
yopp
а в оплог операции попадают после коммита в хранилище