Can
Can
Can
Nick
Я так понимаю все рекомендуют сбить все базы которые относятся к одной компании в одну коллекцию
Обычно это самый простой вариант, но есть ряд кейсов когда надо партиционировать по какомуто признаку, как правило по месяцам/дням в отдельные коллекции и на уровне кода накручивать доп логику, и как правило как выше отметили это надо если устаревшие данные надо удалять. И главное это делать дешево. Если подобного не требуется то и разбивка по отдельным коллекциям и тем более бд избыточна
Elvee
Elvee
доброе утро! Начинаем день с вопроса) хах)
Elvee
Есть 3 физических сервера. На нём будет установлен - веб, еластик и монга
Elvee
Монгу в режиме реплик мне лучше держать в докере? Скажем, 3 контейнера или же лучше их отдельно установить на 3 сервера?
Elvee
репликация мне не нужна в случае с монгой, но для того, чтобы сделать конектор между еластикой и монгой нужно запускать в режиме реплик
yopp
yopp
Elvee
Elvee
yopp
Тогда на ту, на которой меньше всего нагрузки
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%.
Elvee
Elvee
yopp
yopp
А какая ошибка при подключении?
Elvee
Elvee
Elvee
yopp
А компас что показывает?
yopp
А вы в компасе какое имя хоста указываете?
Elvee
yopp
Вероятнее всего это проблема с разрешением DNS имен, так как монга в контейнере. Вам нужно подключаться из той-же докер-сети что и монга, по имени контейнера
Elvee
Андрей
Бедная монго, где ж она так провинилась, что абсолютно все здесь её пхают в докер и не могут подключиться потом? Вся СУБД - один бинарник, который скачивается и распаковывается в условный /opt/mongodb. Создать рядом каталог /data, напилить текстовый конфиг из 10 строк, сгенерить keyfile. Никто осилить не может. Каждый день через день одни и те же "бока" лечим тут, которые растут из контейнеров.
Elvee
Elvee
отвалилось, удалил, форматнул, натупил - переустанавливать систему? или контейнер лучше удалить?
Elvee
Докер даёт своего рода страховку от человеческого фактора и банального незнания во время разработки.
Elvee
Андрей
Это если речь про тестирование в режиме реплик на одном сервере.
Андрей
Там один бинарник выходит, файл ключа и 3 конфига, которые отличаются только путями к данным и логам своей реплики и портом базы.
Farrux
Hi.MongooseServerSelectionError: connect ECONNREFUSED ::1:27017
что это за ошибка?
Aleksander
Там же написано
Daniil
Есть коллекция orders. В ней список товаров. Как можно поместить данные товара в нужный элемент списка?
Daniil
-
Антон
Спасибо!
Сперва думал, что что-то само навернулось, а теперь уже понятно, что это навернули.
Полезу из бэкапа всё доставать.
Благодарю!
Thunder
Всем привет, есть коллекция с дублями документов по определенным значениям, хочу создать уникальный индекс и удалить дублирующиеся документы db.temp.createIndex({A:1, B:1},{unique:true, dropDups:true}) такой запрос не подходит, т.к. dropDups:true больше не поддерживается(а именно он и гуглится только). как решить задачу?)
Nick
Elvee
Всем привет! Получил ошибку в докере при развертывании монги
permissions on /auth/file.key are too open
Elvee
Elvee
Саму монгу запускаю в режиме реплик
Andrey K.
Elvee
Права на файл?
да но получается нужно их менять в самом контейнере
Elvee
ох уж эта винда...
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 есть. больше часа уже работает, конца и края не видно)
Nick
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 есть. больше часа уже работает, конца и края не видно)
Сколько дублей?
Thunder
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
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
Форич в ноде условно однопоточный, поэтому на таком количестве доков все растянулось. Ускорить можно было бы с авайтом
Mashxurbek
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 есть. больше часа уже работает, конца и края не видно)
Зачем сортировать на _id если там уже дефолтная сортировка