RapidCodeLab
_id: { $in: [id1, id2, id3]}
Dmitry
Всем привет! Подскажите есть ли какой-то параметр, чтобы коннекты примерно ровно распределялись по инстансам? То есть у меня мастер и 2 реплики, на каждой max/incomingConnection 100, но может быть на одной 100 коннектов, на другой ноде 40, на 3 - 10. Хочется чтобы на каждом было ~50.
Dmitry
В драйвере же есть встроенный пулер, он тоже не может?
Easy Rider
кто как делает обновление бекенда? например, на бекенде замечен косяк, он исправляется, надо внести исправление, но при этом же сайт будет не работать какое-то время, хотя бы даже 1 минуту, пока сервисы перезапустятся
RapidCodeLab
сделай несколько инстансов бэкенда, обновляй их раздельно
Iskander
Всем привет! Пожалуйста, подскажите, что я делаю не так? Пытаюсь упаковать mongodb в контейнер + добавить обязательную аутентификацию по username+password для ВСЕХ действии и ВСЕХ баз. Написал такой скрипт: docker run -it \ -d \ -e AUTH=yes \ -e MONGODB_ADMIN_USER=admin \ -e MONGODB_ADMIN_PASS='password' \ -e MONGODB_APPLICATION_DATABASE=mydb \ -e MONGODB_APPLICATION_USER=sa \ -e MONGODB_APPLICATION_PASS='password' \ -p 27017:27017 mongo:latest Он все равно работает без аутентификации =(
Easy Rider
технически как это сделать
Кылычбек
Всем привет
Кылычбек
Кылычбек
Кто нибудь пробовал эту документацию, присоединить двух кластеров синхронно
Anvar
Коллеги, приветствую, подскажите пожалуйста. Ранее не работал с MongoDB. Пытаюсь поднять монгу в контейнере. Но возникает ошибка, вот что достал из логов. 1: 0xb81280 node::Abort() [mongosh] 2: 0xb812fe [mongosh] 3: 0xbed0ee [mongosh] 4: 0xbed1b6 node::NodePlatform::NodePlatform(int, v8::TracingController*) [mongosh] 5: 0xabe90f node::MultiIsolatePlatform::Create(int, v8::TracingController*) [mongosh] 6: 0xab5c84 main [mongosh] 7: 0x7fe68b70ed90 [/lib/x86_64-linux-gnu/libc.so.6] 8: 0x7fe68b70ee40 __libc_start_main [/lib/x86_64-linux-gnu/libc.so.6] 9: 0xab860e [mongosh] error: unexpected "js-yaml.js" output while parsing config: mongosh[25]: ../src/node_platform.cc:61:std::unique_ptr<long unsigned int> node::WorkerThreadsTaskRunner::DelayedTaskScheduler::Start(): Assertion `(0) == (uv_thread_create(t.get(), start_thread, this))' failed. Кто знает, в чем может быть проблема?
Nick
в https://stackoverflow.com/questions/68228694/getting-error-unexpected-js-yaml-js-output-while-parsing-config-from-mongodb интересная причина озвучена, что с выделенными ресурсами?
Ivan
Всем привет! Подскажите есть ли какой-то параметр, чтобы коннекты примерно ровно распределялись по инстансам? То есть у меня мастер и 2 реплики, на каждой max/incomingConnection 100, но может быть на одной 100 коннектов, на другой ноде 40, на 3 - 10. Хочется чтобы на каждом было ~50.
Read-Heavy Applications A replica set is designed for high availability and redundancy. In most cases secondary members operate under similar loads as the primary. You should not direct reads to secondaries. https://www.mongodb.com/docs/manual/core/replica-set-architectures/#read-heavy-applications Если я правильно это читаю, соединения по-умолчанию распределяются равномерно, если в строке подключения указаны все ноды. Можно ещё поменять/проверить приорити нод. При равных приорити нагрузка должно быть равномерной из коробки
Yury
Подскажите, если использовать транзакции, нужно базу в каком-то специальном режиме запускать, параметры какие-то добавлять?
Slava
MongoServerError: The body function must be specified. Привет, использую следующий пайплайн для аггрегаций: [ { $lookup: { from: `${customerAnonymisedModel.modelName}s`, localField: '_id', foreignField: '_id', as: 'anonymised', }, }, { $unwind: { path: '$anonymised', preserveNullAndEmptyArrays: true, }, }, { $redact: { $cond: { if: { $eq: [ { $function: { body: function (customer: CustomerDocument, anonymisedCustomer: CustomerDocument): boolean { return ( JSON.stringify(_.pick(anonymiseCustomer(customer.toJSON()), customerFields)) !== JSON.stringify(_.pick(anonymisedCustomer.toJSON(), customerFields)) ); }, args: ['$$ROOT', '$anonymised'], lang: 'js', }, }, true, ], }, then: '$$KEEP', else: '$$PRUNE', }, }, }, ] И получаю ошибку: MongoServerError: The body function must be specified. Поискал инфу и нашел что-то о том, что нужно использовать строковую функцию, хотя в документации явно приводятся примеры с использованием именно функции
Slava
Если говорить в целом о задаче, то у меня есть 2 коллекции: customers и customers_anonymised customers_anonymised пополняются из customers теми же данными, но детерминированно анонимизируются. Мне нужно следить за изменениями в коллекции customers и сравнивать с сustomers_anonymised, если какие-то значения изменились, то получить те документы, которые были изменены. Использовать watchers - не вариант, тк скрипт может быть выключен, а изменения произойдут мануально
Slava
если актуально то уберите все типы в объявлении функции, там чистый js без всего
та не, тайпскрипт же компилируется сначала в js, а потом код исполняется
Slava
Решил задачу так: изменил алгоритм анонимизации на более простой - перевожу в md5, а дальше в пайплайне немного откорректированный код с $function в виде строки function (val) { return hex_md5(val) }
Anton
Добрый день коллеги! Подскажите как быть. Ситуация такая: Существует база данных 800 гигабайт, к которой подключаются клиенты и простоя быть не должно не говоря уже о потере данных. Вылетел единственный secondary. Т.к. данных были потеряны на нём из за raid0, пришлось заново синкать, но т.к. данных очень много, судя по всему оплога в 44 гига не хватает. Приняли решения увеличить до 150 гигабайт, запустили еще раз синк, но ситуация повторилась. Заметил что оба синка вылетали через 15 часов, очень странно. Последний вывод перед ресинком: ``` I REPL [repl writer worker 4] Finished cloning data: OK. Beginning oplog replay. I REPL [replication-344] Applying operations until { : Timestamp(1684830885, 8074) } before initial sync can complete. (starting at { : Timestamp(1684777533, 2061) }) NETWORK [repl writer worker 4] SocketException: remote: (NONE):0 error: SocketException socket exception [RECV_TIMEOUT] server [replexec-15] Error in heartbeat (requestId: 66042690) to server:27017, response status: NetworkInterfaceExceededTimeLimit: Couldn't get a connection within the time limit [repl writer worker 4] network error while attempting to run command 'isMaster' on host [NetworkInterfaceASIO-Replication-0] Ending connection to host server:27017 due to bad connection status; 0 connections to that host remain open [NetworkInterfaceASIO-RS-0] Ending idle connection to host server:27017 because the pool meets constraints; 2 connections to that host remain open I REPL [replication-344] Finished fetching oplog during initial sync: CallbackCanceled: oplog fetcher shutting down. Last fetched optime and hash: { ts: Timestamp(1684830887, 5467), t: 17 }[-6398059575360367928] ``` Сорян, логи не по порядку. Версия монги 3.6
Anonymous
Добрый день коллеги! Подскажите как быть. Ситуация такая: Существует база данных 800 гигабайт, к которой подключаются клиенты и простоя быть не должно не говоря уже о потере данных. Вылетел единственный secondary. Т.к. данных были потеряны на нём из за raid0, пришлось заново синкать, но т.к. данных очень много, судя по всему оплога в 44 гига не хватает. Приняли решения увеличить до 150 гигабайт, запустили еще раз синк, но ситуация повторилась. Заметил что оба синка вылетали через 15 часов, очень странно. Последний вывод перед ресинком: ``` I REPL [repl writer worker 4] Finished cloning data: OK. Beginning oplog replay. I REPL [replication-344] Applying operations until { : Timestamp(1684830885, 8074) } before initial sync can complete. (starting at { : Timestamp(1684777533, 2061) }) NETWORK [repl writer worker 4] SocketException: remote: (NONE):0 error: SocketException socket exception [RECV_TIMEOUT] server [replexec-15] Error in heartbeat (requestId: 66042690) to server:27017, response status: NetworkInterfaceExceededTimeLimit: Couldn't get a connection within the time limit [repl writer worker 4] network error while attempting to run command 'isMaster' on host [NetworkInterfaceASIO-Replication-0] Ending connection to host server:27017 due to bad connection status; 0 connections to that host remain open [NetworkInterfaceASIO-RS-0] Ending idle connection to host server:27017 because the pool meets constraints; 2 connections to that host remain open I REPL [replication-344] Finished fetching oplog during initial sync: CallbackCanceled: oplog fetcher shutting down. Last fetched optime and hash: { ts: Timestamp(1684830887, 5467), t: 17 }[-6398059575360367928] ``` Сорян, логи не по порядку. Версия монги 3.6
Решили проблему?
Alikhan
Всем привет! Делаю регистрацию. Есть подтвержденные и не подтвержденные юзеры. Есть 2 решения: 1) вынести не подтвержденных юзеров в отдельную коллекцию 2) держать все в одной коллекции и добавить флаг isNotActivated: boolean Подскажите пожалуйста, по производительности какой спосою лучше
Lukaš 🇨🇿
Обычно нет смысла вытаскивать их другую коллекцию
Lukaš 🇨🇿
Проще флаг
Alikhan
Понял, спасибо👍
Anton
Решили проблему?
Да, сегодня засинкалась реплика. Чуть позже скину как решили
Anonymous
Да, сегодня засинкалась реплика. Чуть позже скину как решили
Мне интересно, может быть там есть какой-то config
Anton
Мне интересно, может быть там есть какой-то config
Добавили два параметра в /etc/sysctl.conf: net.ipv4.tcp_tw_reuse = 1 net.ipv4.ip_local_port_range = 10000 61000 И параметр для монги: db.adminCommand( { setParameter: 1, oplogInitialFindMaxSeconds: 600 } )
Nik
Народ всем привет! Подскажите какую er диаграмму посоветуете для проектирование БД для mongo? видел hackolade, но на данный момент не доступна
Шынгыс
Всем, привет. Для обновления 5 млн документов целесобразно ли использовать updatemany() или лучше делать в курсоре/в цикле ?
Nick
Всем, привет. Для обновления 5 млн документов целесобразно ли использовать updatemany() или лучше делать в курсоре/в цикле ?
ели можете логику изменения уложить в update то его и лучше использовать. На курсоре имеет смысл делать если вы не можете себе позволить нагрузку на монгу пока идет этот апдейт и нужно контролировать отзывчивость монги
Alikhan
Всех приветствую! Помогите пожалуйста поправить запрос. Как можете видеть, я достаю документы с помощью aggregate, так же присутствуют два $lookup. Первый $lookup достает документ из коллекции users и возвращает массив из обьекта. Нужно чтобы он возвращал обьект. Второй $lookup достает документы из коллекции answer-for-reviews и возвращает массив answers в котором обьект с ключом count. Нужно чтобы он возвращал только answersCount. На скрине можете увидеть нужный результать. Если есть советы по оптимизаций можете написать, у меня немного опыта с монго.
Alikhan
Alikhan
Ща попробую
𝔏𝔢𝔯𝔬𝔶
Alikhan
конечно
офигеть, правда сделал, спасибо👍
Nick
Если научиться просто чет делать то официальный компас, если поглубже то просто монгошел и из консоли
lmn
Бесплатного кластера уже мало людям) О времена о нравы
Mikhail
Всем привет, есть кто шарит в kafka+debezium+mongo связке? Собсна проблема следующая: Нужно настроить коннектор к монге из кафки с плагинами дебезиума, чтобы данные читались только с одной конкретной ноды (бэкап скрытая реплика), чтоб не аффектить весь остальной кластер. Перепробовал кучу вариантов, меняя "mongodb.hosts", "mongodb.connection.string" и прочие параметры кафки, но по итогу ничего не изменилось, снапшот идет сниматься с мастер ноды, а чтение уходит на реплики основного кластера. При этом в логах кафки появляются строки а-ля Server hidden_replica:27017 is no longer a member of the replica set Либо такая ошибка, либо Unable to connect to primary node of Подскажите, кто делал что-то подобное, мой вариант вообще реально сделать - чтобы и снапшот и чтение шло только с нужной реплики и ниоткуда больше?
yopp
Всем привет, есть кто шарит в kafka+debezium+mongo связке? Собсна проблема следующая: Нужно настроить коннектор к монге из кафки с плагинами дебезиума, чтобы данные читались только с одной конкретной ноды (бэкап скрытая реплика), чтоб не аффектить весь остальной кластер. Перепробовал кучу вариантов, меняя "mongodb.hosts", "mongodb.connection.string" и прочие параметры кафки, но по итогу ничего не изменилось, снапшот идет сниматься с мастер ноды, а чтение уходит на реплики основного кластера. При этом в логах кафки появляются строки а-ля Server hidden_replica:27017 is no longer a member of the replica set Либо такая ошибка, либо Unable to connect to primary node of Подскажите, кто делал что-то подобное, мой вариант вообще реально сделать - чтобы и снапшот и чтение шло только с нужной реплики и ниоткуда больше?
скорее всего вам нужно подключаться напрямую к hidden ноде, без указания всех seed hosts в uri. В противном случае клиенты не могут использовать hidden ноды для чтения вне зависимости от readPreference, так как в этом и есть смысл hidden флага
yopp
Т.е в uri должен быть указан только хост hidden ноды, без параметров указывающих на подключение к реплике
Mikhail
скорее всего вам нужно подключаться напрямую к hidden ноде, без указания всех seed hosts в uri. В противном случае клиенты не могут использовать hidden ноды для чтения вне зависимости от readPreference, так как в этом и есть смысл hidden флага
в том то и дело, что я только hidden ноду и указываю. Если ее прописать в "mongodb.hosts", то выдает ошибку "Unable to connect to primary node" и вооще ничего не происходит А если прописать в "connection.string", то оно само уходит на мастер и тянет оттуда, а в логах потом появляется "Server is no longer a member of the replica set"
yopp
Хм. Возможно коннектор не поддерживает прямое подключение к hidden нодам? Если через шелл напрямую подключиться к hidden ноде, используя того-же пользователя, под которым вы настраиваете подключение коннектора и попробовать выполнить операцию чтения, то чтения выполняются корректно?
yopp
Не знаком с этим коннектором, возможно он использует changeStream для экспорта данных. Не уверен что при прямом подключении changeStream корректно работает
Mikhail
Если через shell подключаться, то да, чтение идет как с обычной реплики, проблем нет. По changeStream кстати возможно да, что из-за этого проблема, спасиб, копну еще в эту сторону
Bekzat
Ребята, когда юзаем bulkWrite как можно получить последнюю выполненную операцию ?
Bekzat
insertOne updateOne играют роль при выполнении записи ? или последний элемент в array будет последним что выполняет bulkWrite ?
Anonymous
Приветствую, какую асинхронную ODM посоветуйте на python?
Sova
Красивое котэ
Димитрий
Буквально час тыкаюсь с бэком, при отправке выдает 404, мне кажется что у меня может быть не подключена бд к серверу. Скажите пожалуйста туда ли я копаю и может подскажите решение
Димитрий
Димитрий
404 это не найдена страница. Это ни как с бд не связано
Можете подсказать с чем может быть связана эта ошибка? неправильно написан middleware или схема или все сразу? ( звучу глупо, но мне нужно просто прикрутить регистрацию и какую-то легкую бд к проекту, и 20 минут туториала уже 2 с чем-то часа пытаюсь решить )
Zona
Доброй ночи! Помогите с монго кластером. Не получается сделать rs.initiate указав members dns имя хоста. mongo-0 - нормально mongo-0.example.com - не работает..... как можно обойти кроме как внесением записей в /etc/hosts?
Mashxurbek
Не на тот эндпоинт отправляете
Alexandrr
в квадрате
Andrey
Приветствую, какую асинхронную ODM посоветуйте на python?
Вообще, субъективно не люблю все эти орм, одм, но решил попробовать beanie -> https://beanie-odm.dev/ И то из-за того что Fastapi, pydantic.
Артем
Beanie выглядит прикольно на первый взгляд, но по факту pycharm будет пестреть ошибками типизации А сама ODM строит сомнительные по производительности запросы (там может выйти такая вложенность lookup`ов, что можно застрелиться)
Артем
То, что под капотом pydantic — круто, бесспорно здесь
Andrey
Beanie выглядит прикольно на первый взгляд, но по факту pycharm будет пестреть ошибками типизации А сама ODM строит сомнительные по производительности запросы (там может выйти такая вложенность lookup`ов, что можно застрелиться)
С pycharm вообще нет проблем, в нем и пишу сейчас. А по поводу запросов и прочего, ну конечно надо смотреть, тем более любое преобразование str->json—>куча классов, объектов - у вас просядет производительность.
Артем
С pycharm вообще нет проблем, в нем и пишу сейчас. А по поводу запросов и прочего, ну конечно надо смотреть, тем более любое преобразование str->json—>куча классов, объектов - у вас просядет производительность.
Любое использование ссылок (Link), убивает тайпчекер, потому что он считает, что это объект типа link, а не то, на что он ссылается Про просадки я говорил именно про то, как строятся запросы
Andrey
Более того, лукапы это всё-таки не про монгу
Alexandrr
Вообще, субъективно не люблю все эти орм, одм, но решил попробовать beanie -> https://beanie-odm.dev/ И то из-за того что Fastapi, pydantic.
мне советовали следующие: https://marshmallow.readthedocs.io/en/stable/ https://github.com/reagento/dataclass-factory https://github.com/reagento/dataclass-factory/tree/3.x/develop
Артем
Не очень понял, у меня «строгий» подходит к тайпхинтам и тайпингу в целом, ничего красного в pycharme нет
Пусть объект User имеет поле вида field: Link[AnyModel] (так никто делать не будет, но для примера) Тогда запрос вида User.field.{свойство}, будет светиться желтым, ибо pycharm не понимает, что нужно смотреть в AnyModel, а не Link