Nikita
Aleksandr
я когда перевожу некоторые проекты на монгу то у меня и чтение и запись ускоряются
Aleksandr
все от запроса зависит
Aleksandr
но на запись заметно значительнее выигрыш
yopp
yopp
Nikita
yopp
yopp
коллекция это просто namespace
yopp
Dmitriy
yopp
вы так _никогда_ ничего не сделаете
yopp
а это путь который сожрёт все ресурсы
yopp
оптимизацию без реального продукта не просто не имеет смысла делать, о ней даже не имеет смысла думать
yopp
потому что у вас нет предмета оптимизации, у вас нет понимания узких мест
yopp
по этому собрать за ночь из говна и палок что-то работающее это 100% успешний ценарий, потому что позволит вам понять проблемное поле
yopp
вам они не нужны
Dmitriy
yopp
самый быстрый способ выбрать odm для языка на котором вы можете из говна и палок за ночь собрать прототип той вещи, которую вы хотите собрать
Nikita
Непонятно для чего именно)
А это не важно. Тут ведь отвечают на конкретные технические вопросы? Или если NDA не позволяет раскрывать кейсы в проекте, то тут не ответят на вопрос по проекту?
yopp
вы могли бы это время потратить на вещи которые добавляют вам ценности, в первую очередь спецификацию того что вы хотите сделать
yopp
Dmitriy
yopp
ваш nda не запрещает вам взять другое предметное поле и спроецировать проблему на него
Nikita
yopp
это метафора
yopp
«за ночь из говна и палок» означает что вы можете собрать что-то работащее без приложения каких либо существенных усилий
Nikita
Nikita
@dd_bb кем работаете, если не секрет? DB Admin?
yopp
DBA это совершенно не нужная роль, лишняя абстракция. Структурой данных должны заниматься архитекторы, запросы должны уметь писать и понимать инженеры, а ручки крутить те кто отвечает за инфраструктуру.
Nikita
Ручки крутить? Вы про ЦОДы?
Anonymous
привет! подскажите обновить много записей но в зависимости от какого-то параметра(тоесть каждую запись по своему обновить) можно только итерируясь через findandupdate?
Lev
Почему монго жрет память?
Старый
Lev
День-два и потребление уже 4 гига.
Включена репликасет только для changelog, второго сервера нет, на changelog повешен бекенд.
Lev
Старый
И чего с ним делать?
там написано, поставить натравить на него прмоетеус, поставить графану и посмотреть графики
Старый
чем занята монга
Старый
Lev
Вообще, у нас на одном серваке сейчас все докера.20ГБ оперативы. Монга съедает 5 за пару дней. После чего все встает колом.
И что то мне подсказывает, что оно действительно по какой то причине жрет оперативу и если я просто ограничу контейнеру память дело кончится плохо...
Но тогда как понять, сколько ей оперативы отдать, на сколько ограничить монгу?
yopp
yopp
вы можете попробовать ограничить размера кеша для данных
yopp
(это единственно что вы можете в принципе сделать)
Denis
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
Смотря какая природа запросов, может профита не дать, но добавить кучу логической сложности
Denis
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
Просто в популейте на рефпасах надо явно указывать коллекцию
Nick
Slava
Проблема была в том, что я неправильно сделал ссылку на модель
Slava
Надо было :
participants.model
Dmitriy
Всем привет. Есть массив статей и нужно возможность менять их позицию. Я добавляю в документ поле позишн и когда на фронте меняю у одной статьи его, то пересобираю позишн у остальных.
И теперь нужно отправить массив с айди+позишн и обновить их во всех документах. Вопрос как это средствами монги провернуть правильно?
Aleksandr
Dmitriy
Aleksandr
сколько документов?
Dmitriy
Думаю до 100 будет. Не больше
Aleksandr
bulkWrite тогда
Aleksandr
ему даешь массив операций вида { updateOne: { filter: { _id }, update: { $set: { posNum }}}
Dmitriy
Спасибо
yopp
bulkWrite в этом случае не нужен, просто делаете обновления один за одним.
Если это связанные обновления и у вас 4+, то внутри транзакции.
bulkWrite это сетевая оптимизация на случай если вы уперлись в latency сети и имеет побочный эффект в сложности отладки. Если внутри батча произойдёт ошибка то монга просто плюнет в вас ошибкой и вы останетесь с неизвестным состоянием, потому что у вас не будет возможности узнать какие конкретно операции из батча применились
Dmitriy
yopp
Да, в транзакции.