Sergey
но часто никто не может оценить ущерб от простоя
Sergey
особенно в госконторе
Sergey
или вообще от потери данных, если вдруг помимо реплики ещё и на бекапах решили сэкономить
tenni
аххаахах
Serhio
радует одно за эти данные не расстреляют никого)
Sergey
не факт)
Serhio
за те что у меня похерились не расстреляют
yopp
и потом repairDatabase
Serhio
имя коллекции не важно? или нужно то же указывать
yopp
думаю что нет, не важно
yopp
попробуй на маленькой коллекции сначала
Serhio
ок, спасибо. Попробую
yopp
и на бекапе файла, не оригинале :)
yopp
в WiredTiger.wt вроде как метаданные и хранятся
Serhio
тоесть надо взять исходную колекцию и индекс и переименовать . я правильно понял?
yopp
угу
Serhio
затем подменить
yopp
берёшь из .stats() новой коллекции WiredTiger.uri
yopp
там будет имя базы
Serhio
и имя коллекции на диске
yopp
это я и называю базой. хранилище физическое
Serhio
а понял
yopp
и тоже самое с индексом по _id
yopp
делать с выключенной монгой, стартанут, посмотреть в коллекцию. если данные не появились сделать repairDatabase
yopp
если и потом не появятся, то ты можешь попробовать тот-же метод что и с WiredTiger.wt
yopp
той читалкой попробовать поковырять таблицу
yopp
я думаю что обойти таблицу и достать bson блобы не очень сложно будет
Serhio
хм, ну да)
yopp
вопрос только как там они физически хранятся, но я так понял что они используют абстракции из wt прямиком, так что если таблицу сырую получится прочитать, данные там просто перебрать можно. а это сжатый snappy bson
yopp
а вот если они сами страницами управляют, тогда может быть сложно
yopp
https://emptysqua.re/blog/driver-features-for-mongodb-3-6/
yopp
Now it’s time for dessert! MongoDB 3.6 will have a new event notification API.
yopp
cursor = client.my_db.my_collection.changes([ {'$match': { 'operationType': {'$in': ['insert', 'replace']} }}, {'$match': { 'newDocument.n': {'$gte': 1} }} ]) # Loops forever. for change in cursor: print(change['newDocument'])
yopp
ого
yopp
вот это очень круто
yopp
интересно, как оно с concurrency работает.
yopp
(97% что никак, скорее всего это обёртка над оплогом)
yopp
там отличный документ всплывает: https://emptysqua.re/blog/how-to-write-resilient-mongodb-applications/ хороший пример как мыслить за пределами тразакций
yopp
indempotent queries это один из самых слабообсуждаемых моментов, потому что если у тебя или сами данные индемпотентны или ты изначально проектируешь запросы особым образом — в 99% случаев можно обойтись без транзакций, сохранив огромную пропускную способность
yopp
в стартапчике который мы пилили, получилось в целом бабки сделать индемпотентные. но там бизнес-процесс был очень своеобразный, хотя в теории такую штуку можно применить куда угодно
yopp
мы делали платную подписку на контент, по модели fair share, когда фиксированная подписка распределяется между всеми авторами, чей контент ты потреблял, пропорционально количеству потреблённого контента. мы специально сделали биллиг цикл в 7 дней (бизнес-процесс позволял и так даже удобнее было) и продавали подписку по несколько недель (от 4 и выше) на каждую покупу внутри системы выставлялся заказ. внутри заказа поддокументами хранилась история действий (это была стейтмашина по сути, хранились переходы). на заказ создавалась оплата (тоже стейт машина с поддокументами), которая асинхронного могла менять свои состояния по триггерам из гейта и по необходимости меняла состояние заказа. когда оплата переходила в состояние «оплачена», она дергала заказ, который в свою очередь тупо генерировал ещё X записей в коллекции с неделями. а уже активация недель была делом техники, потому что они всегда активируются в одном порядке, так что два конкурентных запроса всегда схватят одну и ту-же неделю это отлично закрывало кейс, когда пользователь открыл браузер, у него восстановилось 10 вкладок с нашим контентом, но подписка истекла и все 10 запросов одновременно пытаются активировать новую неделю)
yopp
это как ответ на вопрос: КАК ЖЕ ДЕНЬГИ БЕЗ ТРАНЗАКЦИЙ ТАААА
yopp
и распредление бабла, тоже была достаточно простая история: у автора тоже неделя, только со своим шагом. неделя покрывает конкретную дату. можешь хоть 30 раз его сгенерировать — данные будут одни и теже
Nick
хм, я чета даже захотел 3.6 с таким драйвером. кстати там было упоминание что This winter, we’ll release MongoDB 3.6 это так и ожидается?
yopp
это они так планируют, а выйдет она скорее всего к весне :)
yopp
но у меня нет статистики по тому как сильно они релизы проёбывают
Nick
ждем пускаем слюни
yopp
там ещё explain для аггрегаций будет
yopp
это самый сок
tenni
мне понравился пост в блоге, раскрывает некоторые фичи релиза
Serhio
Дамп бинарный
Serhio
Импорт нет
Anonymous
Ищем сотрудника в нашу команду - администратора БД MongoDB !!!!!! https://hh.ru/vacancy/20635690
yopp
Ищем сотрудника в нашу команду - администратора БД MongoDB !!!!!! https://hh.ru/vacancy/20635690
Если у вас есть какие-то конкретные задачи, вы можете нанять нас
yopp
Но на будущее, не надо ставить столько восклицательных знаков — никто в серьёз не будет воспринимать
yopp
М?
Anton
Здрасьте. Вопрос по mongoose: с другой sql orm было так: брался коннект из пула, использовался для всех операций для данного http запроса, а в конце запроса возвращался обратно. Насколько это правильно в целом и в контексте mongodb? и как такое сделать, используя mongoose?
Dmitrii
монга сама разруливает пул и коннекты
yopp
монга сама разруливает пул и коннекты
Монга ничего не разруливает. Но в отличии от RDBM ей не требуется хранить «представление» соединения, как следствие монга может держать много соединений с минимальным оверхедом.
yopp
Это к нодовцам лучше адресовать
Denis
А смысл в привязке? Монгус сам разруливает это дело
Sergey
как проверить, работает сжатие или нет? db.runCommand({getCmdLineOpts: 1}) показывает, что опция включена, но хотелось бы посмотреть на какую-нибудь статистику https://docs.mongodb.com/manual/reference/program/mongod/#cmdoption-networkmessagecompressors
yopp
Драйвера пока сжатие не поддерживают и до 3.6 судя по всему не будут
yopp
AFAIK, сейчас эта опция пока влияет только на трафик между нодами
tenni
а толку от компрессии?
tenni
ноды рядом, смысл, только cpu будет кушать лишнее.
yopp
а толку от компрессии?
Для драйвера: полно.
yopp
Весь wire protocol на голом bson построен
tenni
ну тут не поспорить, хм, а я ссылку открыл и не уловил суть разговора видимо.
yopp
А про cpu это бабка надое сказала. Snappy на фоне всего остального не заметен
tenni
ну сеть-то асинхронно написана 100%, на саму монгу не повлияет, а вот cpu гроши, но считать будет
yopp
Между нодами куча трафика. Например если большой поток оплога, сжатие может увеличить пропускную способность. Гигабит оплога не так сложно в пике получить
yopp
Плюс initial sync
tenni
у нас было такое несколько раз, кстати =)