Andrej
upsert=true в options
Документ же тогда создаться только с теми полями, которые указаны в $set, а не с полным списком полей, которые нужно создать? Или я не так понял?
Sergey
У меня монга в кубере. Проблем нет. Конечно вынес на отдельные ноды, чтобы иметь больше предсказуемости в критическом месте.
А на сколько жирные инсталляции ? Объем PV ? Были ли случаи когда одна секондари реплика погибала и нужно было ждать долго ресинк с праймари.
Alexander
А на сколько жирные инсталляции ? Объем PV ? Были ли случаи когда одна секондари реплика погибала и нужно было ждать долго ресинк с праймари.
У нас не сильно жирные. В проде пять реплик по 16 ядер и 32 гига памяти. Сколько там диска на память не помню, но с запасом под наши нужды, так как увеличивать дорого и сложно. Случаев смерти реплик не было. Добавление новой реплики, это долго, конечно, но кажется, что к кубу отношения не имеет. Единственный совет, который тут могу дать: лучше разбить хотя бы на два стейтфулсета. Это упрощает обновление нод.
Alexander
А на сколько у Вас жирные воркер ноды кубернетис для монг под кубер ? По сколько цпу и рам? Используете локальные PV или у Вас есть CSI : Vsphere, Ceph RBD ? Правильно ли я понимаю, что Вы не используется Percona Operator для MongoDB ?
Ноды выше описал. 🙂 Мы живём в Яндекс.Ёблаке. Их монгу не используем потому что она нам не подошла, скажем так, в некоторых аспектах. Обидно было... Используем обычные PV, что выдают яндексоиды. Перкону не используем. Не понял какую проблему оно мне решит.
Alexander
А бэкапите через CronJob через контейнер с mongodump + клиент для загрузки в S3 ? Или вы используете какие-то нативные механизмы в YC для создания снепшотов для PV ?
Бекапим, как завещала документация, снапшотами YC. Кронджобой по API YC. Время от времени, разворачиваем обратно — работает.
Sergey
Бекапим, как завещала документация, снапшотами YC. Кронджобой по API YC. Время от времени, разворачиваем обратно — работает.
Спасибо большое за то что поделились опытом :) очень интересно. А можно еще пару вопросиков. ? В YC CSI создает PV уже c XFS файлухой или ext4 ? Для деплоя монги используете чарты от битнами ? Дополнительно на воркер нодах монги крутите sysctl? (THP, vm.swapiness , итд) ?
Alexander
Спасибо большое за то что поделились опытом :) очень интересно. А можно еще пару вопросиков. ? В YC CSI создает PV уже c XFS файлухой или ext4 ? Для деплоя монги используете чарты от битнами ? Дополнительно на воркер нодах монги крутите sysctl? (THP, vm.swapiness , итд) ?
YC не умеет в XFS. По крайней мере раньше не умел. 🙁 Я общался с об этом с ними и они рассказали, что пробовали его заставить работать, но столкнулись с какими-то серьёзными проблемами. Надо посмотреть, может уже научились... Для деплоя монги описали yaml-файлик со стейтфулсетом и сервисом. Контейнер официальный с докерхаба (перезалитый в наш реджистри). Кажется всё. Деплоим с помощью kustomize (не люблю helm). Ничего дополнительного не крутим. У нас в этом месте всё максимально просто и примитивно. При этом, работает стабильно и нас полностью устраивает.
Alexander
На деве вообще используем дешёвые инстансы, которые раз в сутки перегружаются. Кластер выживает. 🙂
Alexander
Если что — кричи. Тут могу пропустить, так что можно и в личку.
Sergey
Мы тоже у себя крутим монгу в кубере :) но пока для небольших инсталляций с монго. Крутим на общих воркерах и с другими рабочими нагрузками. CSI у нас используется от VSphere , но там тоже XFS пока в alpha - пока живем на ext4. Бэкапы делаем через CJ с помощью кастомного контейнера mongodump + mc (minio-client) - бэкапы в S3
Sergey
Я вот тут собственно и загорелся идеей создания отдельного кластера Kubernetes под DBasS (отдельные воркеры + оператор перконы для MongoDB)
Alexander
Ну это понятный набор. Вроде должно работать. У нас, к слову, это основная БД всего проекта. 🙂
Sergey
@zzz_sochi а еще вопросик можно? Кроме монги из других БД еще что-нибудь крутите в кубере?
Alexander
@zzz_sochi а еще вопросик можно? Кроме монги из других БД еще что-нибудь крутите в кубере?
Да. Есть постгрес (на деве, на проде всё же яндексовый), эластик (полностью свой), meilisearch, мантикора... Может и ещё чего, не помню уже.
Alexander
А, кликхаус был. Потом переехали в яндексовый.
Sergey
Ну если хочется поразвлекаться, то почему бы и нет? Но я не понял зачем. 🙂
Ну мы на своем железе :) у нас VMWare, а там из коробки DBasS отсутствует :) создавать ВМки руками или терраформом, а потом катать ансиблой - это какой-то изврат. А кубер + оператор перконы с монгой вроде как позволяет это сделать все достаточно просто ) Единственное, что усложняется архитектура и обслуживание ))) но зато можно быстро и легко предоставить командам БД как сервис )
Alexander
Проблем ни с кем из них не было, кроме эластика (но он сам по себе синоним проблемы, не любим мы его очень).
Sergey
Проблем ни с кем из них не было, кроме эластика (но он сам по себе синоним проблемы, не любим мы его очень).
С этим согласен ) у нас эластики живут на отдельных ВМ ))) в кубере только для дев окружений раскручиваем) прод только на ВМ
Andrew
Здравствуйте, у меня вопрос по этому примеру. https://www.mongodb.com/docs/drivers/node/current/usage-examples/find/ Пишу эту команду - действительно все выводятся в список объектов. await cursor.forEach(console.dir); А как с ними повзаимодействовать? В какую переменную они записаны? Как их перебрать? Объекты лежаты в свойстве metadata? metadata: [Object], Как достать сами объекты, а не огромное количество свойств вокруг них?
Larymar
добрый день подскажите пожалуйста пытаюсь сделать mongoimport но не могу авторизоваться правильно
Larymar
Larymar
Не понимаю что я делаю не так
Nick
Не понимаю что я делаю не так
а точно там ssl накручен?
Larymar
а точно там ssl накручен?
кажется нет но без него тоже не работает и я не очень хорошо понимаю как это сделать ————- идеа спокойно подключается дефолтным подключением даже без указания логина и пароля а как заставить монгоимпорт работать в упор не понимаю
Nick
тогда как вы подключаетесь из идейки? там вставку можете делат ьили только чтение?
Larymar
Larymar
наврал, что то не с монгой
Nick
перенесите название бд в uri и уберите ключ -d. И у вас последняя верси монгоимпорта?
Larymar
или я не понимаю как ей пользоваться
Larymar
Nick
видимо авторизация делается в настройках подключения
Larymar
спасибо кажется я не понимаю в чем моя проблема подумаю еще немного о том, в чем именно моя проблема
Александр
Коллеги доброго дня подскажите пожалуйста где почитать или посмотреть мне нужно во вложенный документ добавить еще один документ , но пока не пойму абсолютно как это сделатьструктура такая: - город - улица - улица - улица - дом - дом - город - улица - улица - улица - дом - дом мне нужно добавить дом
Nick
спасибо кажется я не понимаю в чем моя проблема подумаю еще немного о том, в чем именно моя проблема
поставьте обычный компас и подключитесь через него или через mongosh (у вас возможно еще старая команда mongo работает), как подключитесь так и такие параметры будут нужны для монгоимпорта
Nick
улицы массив дома - массив
найти объект на втором уровне вложенности массивов и отредактировать его (вставить чтото) не получится
Nick
улицы массив дома - массив
если прям так хочется хранить такие структуры, то вытягивайте в код, редактируйте и полностью перезаписывайте
Александр
Александр
если прям так хочется хранить такие структуры, то вытягивайте в код, редактируйте и полностью перезаписывайте
Вот у меня примерно так, я немного не понимаю хоть и доку четал не понял как работать с city чтобы оно сохраняло все в бд
Nick
Вот у меня примерно так, я немного не понимаю хоть и доку четал не понял как работать с city чтобы оно сохраняло все в бд
почему вы find дергаете на объекте? если хотите его редактировать, то меняете как обычный объект в js и потом .save()
Nick
либо просто findUpdate на модели вызывать
Nick
спасибо))
ну и авайт не забывайте на файндАпдейте
Andrej
Используйте апдейт с апсерт тру и онисерт. https://www.mongodb.com/docs/manual/reference/method/db.collection.update/ https://www.mongodb.com/docs/manual/reference/operator/update/setOnInsert/
Сделал, но пришлось пострадать в связи с тем, что нельзя передать в $set и $setOnInsert поля с одинаковыми ключами и что при $setOnInsert выполнится и $set 😑
Alexandrr
update_one и все
можно кода кусок увидеть? а то муки с этим pymongo
Andrej
можно кода кусок увидеть? а то муки с этим pymongo
chats - название коллекции if result.acknowledged: return True Этот момент я не проверял, интуитивно задал acknowledged==True как подтверждение прошедшей транзакции. upd в доках про это (acknowledged) краем глаза прочитал
Alexandrr
chats - название коллекции if result.acknowledged: return True Этот момент я не проверял, интуитивно задал acknowledged==True как подтверждение прошедшей транзакции. upd в доках про это (acknowledged) краем глаза прочитал
благодарю🤝 п.с. а если используется if то лучше и else дописать, тогда оптимизации внутреннего дизайна языка быстрее исполняются и получается выигрыш на несколько % в производительности
Alexandrr
?
> if not instance > if isinstance is not e.t.c
Vladyslav
> if not instance > if isinstance is not e.t.c
я не знаю о чем вы) у человека написан код без else, вы сказали что с else какая-то фишка производительности есть, А я - что с else вы добавляете nesting
Vladyslav
про какие вложение речь? не пойму
if { } else { } VS if () return // other code
Alexandrr
if { } else { } VS if () return // other code
у него идёт логика: if () return true return false а не if () return
Alexandrr
и там мало того, что получается логическая ошибка при добавлении строк в дальнейшем у байтослесарей, так ещё и интерпретатор делает ветку логики не по бинарной структуре
Emil22878
ребят как мне отсортировать по длине массива ? я делал так
Emil22878