Aleksandr
я когда перевожу некоторые проекты на монгу то у меня и чтение и запись ускоряются
Aleksandr
все от запроса зависит
Aleksandr
но на запись заметно значительнее выигрыш
Nikita
«100 серверов» это из make it scale. Это последний этап, когда у вас уже есть а) работающая 2) корректно решенная бизнес-задача
Хороший вариант, сначала сделать бОльшую часть работы, а потом понять, что технология не поддерживает, то что необходимо)
yopp
коллекция это просто namespace
Dmitriy
нет никакого «поля в коллекции»
Я понимаю, я просто пытался выразится как можно более понятно для человека который ранее работал только с рсубд
yopp
вы так _никогда_ ничего не сделаете
yopp
Хороший вариант, сначала сделать бОльшую часть работы, а потом понять, что технология не поддерживает, то что необходимо)
вы практичестки со 100% веротностью ничего никогда с таким подходом не сделаете, потому что вместо поиска решений для реальных проблем, вы ищите решения для мира своих фантазий
yopp
а это путь который сожрёт все ресурсы
yopp
оптимизацию без реального продукта не просто не имеет смысла делать, о ней даже не имеет смысла думать
yopp
потому что у вас нет предмета оптимизации, у вас нет понимания узких мест
yopp
по этому собрать за ночь из говна и палок что-то работающее это 100% успешний ценарий, потому что позволит вам понять проблемное поле
Nikita
Тут одна проблема. Ни кто пока так и не понял, что вам необходимо)
Да вроде всё понятно было, и даже был получен ответ). Спрашивал про ODM, и про средства для миграций с версионностью.
yopp
вам они не нужны
yopp
самый быстрый способ выбрать odm для языка на котором вы можете из говна и палок за ночь собрать прототип той вещи, которую вы хотите собрать
Nikita
Непонятно для чего именно)
А это не важно. Тут ведь отвечают на конкретные технические вопросы? Или если NDA не позволяет раскрывать кейсы в проекте, то тут не ответят на вопрос по проекту?
yopp
вы могли бы это время потратить на вещи которые добавляют вам ценности, в первую очередь спецификацию того что вы хотите сделать
yopp
ваш nda не запрещает вам взять другое предметное поле и спроецировать проблему на него
yopp
это метафора
yopp
«за ночь из говна и палок» означает что вы можете собрать что-то работащее без приложения каких либо существенных усилий
Nikita
@dd_bb кем работаете, если не секрет? DB Admin?
yopp
@dd_bb кем работаете, если не секрет? DB Admin?
В свободное время — консультантом. Помогаю бизнесу оптимизировать издержки на данные и а инженерам перестать тратить деньги бизнеса на ненужные никому вещи
yopp
DBA это совершенно не нужная роль, лишняя абстракция. Структурой данных должны заниматься архитекторы, запросы должны уметь писать и понимать инженеры, а ручки крутить те кто отвечает за инфраструктуру.
Nikita
Ручки крутить? Вы про ЦОДы?
Anonymous
привет! подскажите обновить много записей но в зависимости от какого-то параметра(тоесть каждую запись по своему обновить) можно только итерируясь через findandupdate?
Lev
Почему монго жрет память?
Старый
Lev
День-два и потребление уже 4 гига. Включена репликасет только для changelog, второго сервера нет, на changelog повешен бекенд.
Старый
Почему монго жрет память?
поставить https://github.com/dcu/mongodb_exporter никак?
yopp
Почему монго жрет память?
потому что это нормальное поведение любого хранилища
yopp
Ручки крутить? Вы про ЦОДы?
я про тюнинг инфраструктурных едениц
yopp
И чего с ним делать?
ничего не делать. почему потребление памяти для вас проблема?
Старый
И чего с ним делать?
там написано, поставить натравить на него прмоетеус, поставить графану и посмотреть графики
Старый
чем занята монга
yopp
чем занята монга
этот экспортер не умеет показывать самые нужные цырфы
yopp
а какой лучше?
никакой, они все плохие
Lev
Вообще, у нас на одном серваке сейчас все докера.20ГБ оперативы. Монга съедает 5 за пару дней. После чего все встает колом. И что то мне подсказывает, что оно действительно по какой то причине жрет оперативу и если я просто ограничу контейнеру память дело кончится плохо... Но тогда как понять, сколько ей оперативы отдать, на сколько ограничить монгу?
yopp
вы можете попробовать ограничить размера кеша для данных
yopp
(это единственно что вы можете в принципе сделать)
Slava
Всем привет! const User = new Schema({    conversations: {        type: [{            type: Schema.Types.ObjectId,            ref: 'Conversation'        }]    } }); const Conversation = new Schema({    participants: {        required: true,        type: [{            sender: {                required: true,                type: Schema.Types.ObjectId,                refPath: 'model'            },            model: {                required: true,                type: String,                enum: ['Band', 'User']            },            messages: {                type: [{                    type: Schema.Types.ObjectId,                    ref: 'Message'                }],                default: []            }        }] }); populate на поле sender в схеме conversation не срабатывает, делаю я это так: user.populate({ path: 'conversations', populate: 'participants.sender' }) Но при этом messages таким же способом полулируются: user.populate({ path: 'conversations', populate: 'participants.messages' }) Что я подразумеваю под словом "популируется" - айдишник преобразуется в объекты, указанные в схеме
Slava
Проблема в том, что не популируется поле sender, подскажите, пожалуйста, почему? И как сделать, чтобы было как надо
Nick
Нет. Юзай bulkWrite
Смотря какая природа запросов, может профита не дать, но добавить кучу логической сложности
Nick
Хз. Циклом булку собрать и закинуть
А смысл если проще запросы обычные накидать?
Nick
Всем привет! const User = new Schema({    conversations: {        type: [{            type: Schema.Types.ObjectId,            ref: 'Conversation'        }]    } }); const Conversation = new Schema({    participants: {        required: true,        type: [{            sender: {                required: true,                type: Schema.Types.ObjectId,                refPath: 'model'            },            model: {                required: true,                type: String,                enum: ['Band', 'User']            },            messages: {                type: [{                    type: Schema.Types.ObjectId,                    ref: 'Message'                }],                default: []            }        }] }); populate на поле sender в схеме conversation не срабатывает, делаю я это так: user.populate({ path: 'conversations', populate: 'participants.sender' }) Но при этом messages таким же способом полулируются: user.populate({ path: 'conversations', populate: 'participants.messages' }) Что я подразумеваю под словом "популируется" - айдишник преобразуется в объекты, указанные в схеме
Что значит refPath model, как это работает?
Slava
Это динамическая ссылка
Slava
Что значит refPath model, как это работает?
Slava
В зависимости от того, что я кину в model - будет выбрана модель для поля sender
Nick
Вот и ответ на ваш вопрос, как монгус узнает к какой коллекции обращаться?
Slava
Просто прочитайте что такое refPath, это не ответ на мой вопрос
Nick
Просто в популейте на рефпасах надо явно указывать коллекцию
Slava
Проблема была в том, что я неправильно сделал ссылку на модель
Slava
Надо было : participants.model
Dmitriy
Всем привет. Есть массив статей и нужно возможность менять их позицию. Я добавляю в документ поле позишн и когда на фронте меняю у одной статьи его, то пересобираю позишн у остальных. И теперь нужно отправить массив с айди+позишн и обновить их во всех документах. Вопрос как это средствами монги провернуть правильно?
Aleksandr
сколько документов?
Dmitriy
Думаю до 100 будет. Не больше
Aleksandr
bulkWrite тогда
Aleksandr
ему даешь массив операций вида { updateOne: { filter: { _id }, update: { $set: { posNum }}}
Dmitriy
Спасибо
yopp
bulkWrite в этом случае не нужен, просто делаете обновления один за одним. Если это связанные обновления и у вас 4+, то внутри транзакции. bulkWrite это сетевая оптимизация на случай если вы уперлись в latency сети и имеет побочный эффект в сложности отладки. Если внутри батча произойдёт ошибка то монга просто плюнет в вас ошибкой и вы останетесь с неизвестным состоянием, потому что у вас не будет возможности узнать какие конкретно операции из батча применились
yopp
Да, в транзакции.