Can
Can
Can
Nick
Я так понимаю все рекомендуют сбить все базы которые относятся к одной компании в одну коллекцию
Обычно это самый простой вариант, но есть ряд кейсов когда надо партиционировать по какомуто признаку, как правило по месяцам/дням в отдельные коллекции и на уровне кода накручивать доп логику, и как правило как выше отметили это надо если устаревшие данные надо удалять. И главное это делать дешево. Если подобного не требуется то и разбивка по отдельным коллекциям и тем более бд избыточна
Elvee
доброе утро! Начинаем день с вопроса) хах)
Elvee
Есть 3 физических сервера. На нём будет установлен - веб, еластик и монга
Elvee
Монгу в режиме реплик мне лучше держать в докере? Скажем, 3 контейнера или же лучше их отдельно установить на 3 сервера?
Elvee
репликация мне не нужна в случае с монгой, но для того, чтобы сделать конектор между еластикой и монгой нужно запускать в режиме реплик
yopp
Монгу в режиме реплик мне лучше держать в докере? Скажем, 3 контейнера или же лучше их отдельно установить на 3 сервера?
Эффективнее всего отдельно от других сервисов, особенно эластика, на трёх серверах
Elvee
Вы можете одну ноду в режиме реплики запустить
да, целое утро мучал и получилось)
yopp
Тогда на ту, на которой меньше всего нагрузки
Elvee
Тогда на ту, на которой меньше всего нагрузки
а как со скоростью? С докером или лучше без? докер крут тем, что в случае чего я его снёс и переустановил не затрагивая систему
yopp
Нет особой разницы, если вам удобнее в докере, то разворачивайте в докере :)
Elvee
Спасибо большое. Пока схема такая... Сервер 1 - Приложение - Монга - коннектор - Еластик мастер Сервер 2 - Еластик дата Сервер 3 - Еластик дата
yopp
Если у вас эластик и монга на одном хосте то ограничьте размеры памяти которые оба сервиса могут под себя выделить. В монге нужно явно установить https://www.mongodb.com/docs/manual/reference/configuration-options/#mongodb-setting-storage.wiredTiger.engineConfig.cacheSizeGB В эластике ключами -Xms/-Xmx https://www.elastic.co/guide/en/elasticsearch/reference/current/advanced-configuration.html#set-jvm-heap-size По-умолчанию это 50% памяти. Вероятно вам нужно ограничить до 25%.
yopp
до этого я пока ещё не дошёл. Монга будет только как хранилище использоваться)
Это нужно обязательно сделать, иначе монга и эластик будут бороться за свободную память, так как их лимиты в 50% больше чем объем реально доступной памяти. За что их будет отстреливать OOM
Elvee
direct не нужен, подключиться можно и без него
странно... у меня без direct не подключаеться...
yopp
А какая ошибка при подключении?
Elvee
А какая ошибка при подключении?
вижу в логах монги, что компас хочет подключиться. Но спустя время показывает getaddrinfo EAI_AGAIN mongo
yopp
А компас что показывает?
Elvee
А компас что показывает?
getaddrinfo EAI_AGAIN mongo Это я о компасе)
Elvee
А компас что показывает?
компас без директа не подключаеться)
yopp
А вы в компасе какое имя хоста указываете?
Elvee
А вы в компасе какое имя хоста указываете?
вот рабочий вариант с директом
yopp
Вероятнее всего это проблема с разрешением DNS имен, так как монга в контейнере. Вам нужно подключаться из той-же докер-сети что и монга, по имени контейнера
Андрей
Бедная монго, где ж она так провинилась, что абсолютно все здесь её пхают в докер и не могут подключиться потом? Вся СУБД - один бинарник, который скачивается и распаковывается в условный /opt/mongodb. Создать рядом каталог /data, напилить текстовый конфиг из 10 строк, сгенерить keyfile. Никто осилить не может. Каждый день через день одни и те же "бока" лечим тут, которые растут из контейнеров.
Elvee
отвалилось, удалил, форматнул, натупил - переустанавливать систему? или контейнер лучше удалить?
Elvee
Докер даёт своего рода страховку от человеческого фактора и банального незнания во время разработки.
Андрей
отвалилось, удалил, форматнул, натупил - переустанавливать систему? или контейнер лучше удалить?
Создаётся пустой реплика сет один раз, тушится, запаковывается в обычный архив и откладывается. Весь разворот - tar -zxvf /путь
Elvee
Создаётся пустой реплика сет один раз, тушится, запаковывается в обычный архив и откладывается. Весь разворот - tar -zxvf /путь
об этом не знал) Спасибо) погуглю как это сделать. Может и вправду удобнее получиться
Андрей
Это если речь про тестирование в режиме реплик на одном сервере.
Андрей
Там один бинарник выходит, файл ключа и 3 конфига, которые отличаются только путями к данным и логам своей реплики и портом базы.
Farrux
Hi.MongooseServerSelectionError: connect ECONNREFUSED ::1:27017 что это за ошибка?
Aleksander
Там же написано
Daniil
Есть коллекция orders. В ней список товаров. Как можно поместить данные товара в нужный элемент списка?
Daniil
Антон
Коллеги, добрый день! Надеюсь, за такое тут не банят? Похоже, кто-то мне базу данных навернул удаленно (да, я в курсе, что сам дурак). Подскажите, есть ли возможность восстановить данные и может ли кто-то за деньги помочь? 2023-08-10T06:39:36.834+0300 I COMMAND [conn10729] dropDatabase config - dropping collection: config.system.sessions 2023-08-10T06:39:36.841+0300 I COMMAND [conn10729] dropDatabase config - dropped 1 collection(s) 2023-08-10T06:39:36.841+0300 I COMMAND [conn10729] dropDatabase config - finished 2023-08-10T06:39:37.036+0300 I SHARDING [conn10729] Marking collection READ_ME_TO_RECOVER_DATA.READ_ME_TO_RECOVER_DATA as collection version: <unsharded> 2023-08-10T06:39:37.036+0300 I STORAGE [conn10729] createCollection: READ_ME_TO_RECOVER_DATA.READ_ME_TO_RECOVER_DATA with generated UUID: c5cf0ca0-7b58-4cb5-97ff-d861d6830c48 and options: {} 2023-08-10T06:39:37.044+0300 I INDEX [conn10729] index build: done building index _id_ on ns READ_ME_TO_RECOVER_DATA.READ_ME_TO_RECOVER_DATA
Антон
Спасибо! Сперва думал, что что-то само навернулось, а теперь уже понятно, что это навернули. Полезу из бэкапа всё доставать. Благодарю!
Thunder
Всем привет, есть коллекция с дублями документов по определенным значениям, хочу создать уникальный индекс и удалить дублирующиеся документы db.temp.createIndex({A:1, B:1},{unique:true, dropDups:true}) такой запрос не подходит, т.к. dropDups:true больше не поддерживается(а именно он и гуглится только). как решить задачу?)
Nick
Всем привет, есть коллекция с дублями документов по определенным значениям, хочу создать уникальный индекс и удалить дублирующиеся документы db.temp.createIndex({A:1, B:1},{unique:true, dropDups:true}) такой запрос не подходит, т.к. dropDups:true больше не поддерживается(а именно он и гуглится только). как решить задачу?)
Сделать выборку с дублями (count по уник полю больше 1) потом решить какой из доков надо оставить, все остальные удалить. Монга не может сама ща вас решить какой док остается т.к не сравнивает полностью доки
Thunder
Сделать выборку с дублями (count по уник полю больше 1) потом решить какой из доков надо оставить, все остальные удалить. Монга не может сама ща вас решить какой док остается т.к не сравнивает полностью доки
db.temp.find({}, { ... "A": 1, ... "B":1 ... }).sort({ ... _id: 1 ... }).forEach(function (record) { ... db.temp.remove({ ... _id: { ... $gt: record._id ... }, ... "A": record.A, ... "B": record.B ... }); ... }); вот так же тоже должно работать?
Elvee
Всем привет! Получил ошибку в докере при развертывании монги permissions on /auth/file.key are too open
Elvee
Всем привет! Получил ошибку в докере при развертывании монги permissions on /auth/file.key are too open
На линуксе, проблем нет. Запускаю на винде и отваливается...
Elvee
Саму монгу запускаю в режиме реплик
Elvee
Права на файл?
да но получается нужно их менять в самом контейнере
Elvee
ох уж эта винда...
Elvee
Всем привет! Получил ошибку в докере при развертывании монги permissions on /auth/file.key are too open
Может кому-то пригодиться. Создал отдельный докерфайл для этого дела. Проблема была в mongodb пользователе
Thunder
db.temp.aggregate([ { $project : { A : 1 , B: 1, }}, { $sort: {_id: 1}}, { $group: { _id: {a:"$A", b: "$B"}, id: {$first: "$_id"}, count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } } ]).forEach(function (record) { db.temp.remove({ _id: { $ne: record.id }, A: record._id.a, B: record._id.b }); }); как то можно это выполнить быстрее?) в коллекции 25М документов. Индекс _id_1_A_1_B_1 есть. больше часа уже работает, конца и края не видно)
Google
db.temp.aggregate([ { $project : { A : 1 , B: 1, }}, { $sort: {_id: 1}}, { $group: { _id: {a:"$A", b: "$B"}, id: {$first: "$_id"}, count: { $sum: 1 } } }, { $match: { count: { $gt: 1 } } } ]).forEach(function (record) { db.temp.remove({ _id: { $ne: record.id }, A: record._id.a, B: record._id.b }); }); как то можно это выполнить быстрее?) в коллекции 25М документов. Индекс _id_1_A_1_B_1 есть. больше часа уже работает, конца и края не видно)
// Создание индекса для полей A и B в коллекции temp, чтобы ускорить сортировку и группировку db.temp.createIndex({ A: 1, B: 1 }); // Агрегация с использованием оператора $group для подсчета количества записей с одинаковыми значениями A и B const aggregationPipeline = [ { $group: { _id: { a: "$A", b: "$B" }, ids: { $push: "$_id" }, // Сохраняем все _id записей для каждой группы count: { $sum: 1 }, }, }, { $match: { count: { $gt: 1 }, }, }, ]; // Получение результатов агрегации const duplicateRecords = db.temp.aggregate(aggregationPipeline).toArray(); // Удаление дубликатов на основе найденных записей duplicateRecords.forEach(function (group) { const idsToRemove = group.ids.slice(1); // Оставляем только _id для удаления, исключая первый db.temp.remove({ _id: { $in: idsToRemove } }); }); // Удаление временного индекса после обработки db.temp.dropIndex({ A: 1, B: 1 });
Thunder
спасибо, попробую. но это то же самое по сути, это будет медленно на моих данных.
Google
спасибо, попробую. но это то же самое по сути, это будет медленно на моих данных.
да может но тоже зависит скорость от железа,, комп должен быть быстрый и nvme
Thunder
32 ядра, 128гб памяти, диски nvme. странно конечно, что так долго все происходит.
Google
Ну это норм толи проблема в примере, это в Node js ? бек
Thunder
нет, это я прям в mongosh запросы делаю
Google
локальный установлено ?
Google
Mongo
Thunder
нет, на сервере
Google
Я имею mongo cloud или на самом сервере установленно
Thunder
на самом сервере, на железке, baremetal
Google
если база не большой попробуй на mongo cloud чтобы протестировать
Google
просто для сверки
Thunder
много танцев, нет времени, операция по сути разовая, и вроде как выполнилась. просто сомнения брали, что она вообще выполнится)
Ivan
добрый день. создан кластер из 3 нод mongo db, как или где узнать connection string replica sets?
Nick
4831258
Форич в ноде условно однопоточный, поэтому на таком количестве доков все растянулось. Ускорить можно было бы с авайтом