Гена
вопрос скорее в том, в каком порядке делать
Гена
я думаю что нужно пересоздать сначала с другим именем а потом старый дропнуть
Гена
но мне кажется эффект будет такой же
Yaroslav
Если у вас кластер с репликами - вы можете индекс перестраивать на каждой ноде отдельно. Один и тот же индекс вы не создадите два раза (наскольно я помню)
Гена
то есть нет способа пересоздать индекс в нагруженной бд без того, чтоб кластер страдал?
Yaroslav
то есть нет способа пересоздать индекс в нагруженной бд без того, чтоб кластер страдал?
Если у вас кластер с репликами, то вполне может получится без страданий. В документации описан порядок - сначала выключаете реплику из кластера, пересоздаете индекс, затем включаете, и так для всех.
Гена
а можно ссылочку, если не сложно
Yaroslav
https://docs.mongodb.com/manual/tutorial/build-indexes-on-replica-sets/
Nick
3.6.0
повод поискать баги по этой проблеме
Тарас
повод поискать баги по этой проблеме
уже множество просмотрел, ничего не могу найти, как оно считает LicenseType as Shared Key, но шардинг отключен
Nick
как создавалась коллекция?
Тарас
C# mongodb driver, с помощью него
Nick
Тут и unset юзал
ничего внятного по проблеме не нашел
Nick
все упоминания про _id
Тарас
Nick
и выглядит так что у тебя коллекция кастомно создана с другим ключом
Nick
коллекцию пересоздать ест ьвозможность?
Тарас
Не думаю, оно думаю сразу пофиксит, но терять данньІе не вариант
Nick
ничего не мешает сдампить их
Nick
если есть возможность устроить даунтам, то стоит попробовать
Nick
ну и заодно обновиться
Тарас
Ну по сути только такое есть решение, еще думал монго обновить, но всеравно дамп надо пхд. Спасибо за помощь, буду пробовать
Nick
у Тараса проблема и там прикол в том что поле не _id
Тарас
Если я делаю дамп коллекции, затем дропаю её, потом импорт дампа все будет на своих местах? Для перестраховки
Nick
да
Nick
для уверенности можно сделать дамп и поиграться с восстановлением в другую временную коллекцию
Тарас
так и сделал, в другую бд восстановил, локальную
Тарас
Nick, я дропнул колекцию, импортировал дамповую, не хелпануло. потом сделал на этой коллекции Import Data, и оно починило. Но когда добавляю новый документ в коллекцию с ним такая же трабла :)
Тарас
А нет, другая проблема
Nick
а если вручную док вставлять через монгошел, а не из кода?
Тарас
а если вручную док вставлять через монгошел, а не из кода?
Продебажыл еще раз, сохраняет в монго все хорошо, проблема теперь в авторизации, не связанная теперь надеюсь с LicenseType. Еще раз благодарю в помощи
Max
приветствую. нубский вопрос - со стороны бека, использующего монгу с реплика сет указываются все ноды? т.е. если указывать только текущий мастер и он падает, то куда пойдёт бэк? а если все, то как бэк определяет, кто мастер? ну или поделитесь линком на ман, что-то не нашёл.
Max
поправьте меня - за это отвечает mongos, указываются все инстансы с ней, а она дальше разбирается кто мастер?
Yaroslav
Можете указать все ноды, можете один, дравйер и по одной ноде узнает про конфигурацию кластера. Если укажите один и он упадет, при запуске ваша программа не сможет узнать про кластер и не будет работать. Так будет работать и без mongos, реплики сами со всем справятся.
Anonymous
Anonymous
Что делать
Anonymous
Вожу sh start.sh
Anonymous
Бот постоянно перезагружаеться
Anonymous
Есть кто помочь,?
Anonymous
Это вообще что за бот и как он относится к монге?
Андрей
Всем привет, помогите разобраться, почему начал стопаться mongodb сервер
Андрей
просто тупо выключается, потом стартую его и работает какоето время
Андрей
RapidCodeLab
так где логи mongodb то?
Андрей
А где они лежат?
Андрей
А где они лежат?
Там, где указано в конфиге или в сислог летят, наверное.
Андрей
Это?
RapidCodeLab
вот и смотри там, почему падает, молча он не может упасть
Максим
т.е. с вероятностью 1 на лям будут коллизии и внутри коллекции?
В доке написано по какому принципу формируется _id. Это не что-то прям случайное.
Vladimir
ObjectID это, емнип timestamp + random(), так что коллизии возможны только при одновременной вставке
yopp
ts + rand + counter
yopp
rand обычно дерайвят из pid и host-specific идентификаторов
yopp
так что в реальной жизни коллии возможны только если будет counter rollover, а это надо очень много oid в секунду генерировать
yopp
Вот опять упало
проверьте диск
Андрей
проверьте диск
Епти, логами с ноды покушало память кек(( спасибо за помощь!
yopp
ну или так :)
yopp
проще всего сделать ещё одно поле due_date, в котором заранее вычислять date + timeout, сделать по нему индекс и искать просто $gte due_date
Антон
Привет. Не подскажите какие еще есть варианты итерации по большой коллекции(20 млн документов), без skip() и без фокусов с айдишниками как здесь https://stackoverflow.com/a/50267128 потому что айдишник у меня кастомный, а не objectId. ну и чтобы это было быстрее, чем со skip
Антон
или может кто знает как еще можно перенести данные из коллекции А в коллекцию В только те документы, которых нет в коллекции В
Vladimir
Привет. Не подскажите какие еще есть варианты итерации по большой коллекции(20 млн документов), без skip() и без фокусов с айдишниками как здесь https://stackoverflow.com/a/50267128 потому что айдишник у меня кастомный, а не objectId. ну и чтобы это было быстрее, чем со skip
Ну ты же как-то сортируешь документы при выборке? вот это поле вполне может подойти для твоих целей вместо _id для того, что бы очередной запрос выдал только новую пачку данных
Антон
стандартный вопрос: зачем? в чем потребность иметь копии документов?
произошел факап, и данные записывались не в ту коллекцию. теперь их надо вернуть в нужную. но иногда данные с одинаковыми ид есть в двух коллекциях, и просто перезаписать нельзя
Nick
можно просто переименовать колелкцию
Vladimir
если есть индекс, то не займет. А если нет сортировки, то порядок выдачи документов недетерминирован
Антон
можно просто переименовать колелкцию
и оно что ли смержит 2 коллекции? у меня и там, и там данные валидные, они все нужны
Nick
а блин
Vladimir
тогда и скип не понадобится
Nick
тогда номрального способа особо не придумаешь в монге, проблемы кастрированного join. Но для вашего случая можно сделать так: в агрегации используя $out перенести доки в две коллекции с учетом фильтров и в одну накидать то что долнжо остаться, во вторую уже то что надо было скопировать. Потом старую коллекцию с грязными данными удалить и переимено новую в старую
Nick
както так
Антон
тогда читаем из а, вставляем\апдейтим в б. удаляем из а (или помечаем флагом, что обработали), идем заново
удалять бы сразу не хотелось, вдруг что потеряется в процессе ) но с флагом интересная идея,спасибо