Nick
Соответственно почти 100% изменений увеличивают размер документов.
Это неважно, всегда перезаписывается весь док
yopp
всегда создаётся копия страниц с документом, да
Ilia
понял, спасибо
yopp
но тут такой момент: паттерн запроса это универсальная проблема
yopp
т.е. не важно какое хранилище вы будете использовать, от
yopp
*от проблемы не убежать
Ilia
А где можно почитать, как именно монга работает с документами на уровне хранилища? Детали CoW, как переиспользуется место старых версий документов, вот это все.
yopp
это вам не важно воообще
yopp
хорошо работает, отлично прямо
yopp
99.(9)% что ваши проблемы будут лежать далеко за пределами этой предметной области :)
Ilia
Расскажите про кретирии выборки, это по некоему уникальному ид, по совокупности кучи полей, или как?
В терминах постов и каментов: взяли из лога 1M каментов, из них 100k уникальных айди постов, эти 100k айди (последовательно, батчами, всем скопом — как будет эффективнее) используем для запроса
yopp
такие простые вещи как пропускная способность памяти, дисковой системы и размер «горячей» части данных — вот ваши проблемы
Ilia
Если можно сразу — значит сразу
yopp
ну если у вас будет update и вы точно знаете _id документа, то всё будет зависеть от двух факторов
yopp
размер активной части индекса и размер активной части документов
yopp
если оба фактора будут помещаться в память, а поток запросов будет укладываться в аппаратные ограничения по пропускной способности, то всё будет быстро
yopp
на моём дохлом mba 13 года с каким-то тухленьким ssd который вообще по sata подключен, монга может ~30к инсертов в секунду делать
yopp
с документами по килобайту примерно
Ilia
Звучит обнадеживающе 🙂 Пошел разбираться и пробовать. Большое спасибо!
Anonymous
Привет. Порядок документов в коллекции, в которую не добавляются документы, при запросах с пагинацией (limit/skip) без сортировки сохраняется между запросами? А при добавлении / изменении, опять же без сортировки, могут ли "перетасоваться" ранее добавленные документы?
yopp
без указания сортировки порядок не гарантируется
yopp
на практике в рамках standalone инсталяции у вас скорее всего порядко меняться не будет
Anonymous
на практике в рамках standalone инсталяции у вас скорее всего порядко меняться не будет
Спасибо, мне этого достаточно. Хотелось бы ещё уточнить, изменение документа (например сильное увеличесние количества содержимого) теоретически могло бы его поднять выше?
yopp
нет
Anonymous
Благодарю за ответ.
Nick
изменение дока скорее всего откинет его в конец
yopp
нет
yopp
внутренний id не меняется в течении жизненного цикла документа на одной ноде
Nick
внутренний id?
yopp
да
Nick
давай ликбез
yopp
«коллекция» на самом деле состоит минимум из двух k/v хранилищ. одно для _id и другое для документов
yopp
в k/v для документов в роли ключа используется внутренний индектификатор
yopp
он-же используется в индексе для адресации документа
yopp
по нему-же и происходит natural сортировка
yopp
емнип там был varint который более-менее монотонно возрастает
Егор
ARGUMENTS TO $LOOKUP MUST BE STRINGS, LET: {USER_ID: {$TOSTRING: "$_ID"}} IS TYPE OBJECT
yopp
был какой-то ключ для проекции, чтоб включить отображение внутренного id
Егор
Подскажите пожалуйста из-за чего данная ошибка падает
Nick
спасибо
Nick
скиньте всю часть с лукапом
🌀Andrei
ARGUMENTS TO $LOOKUP MUST BE STRINGS, LET: {USER_ID: {$TOSTRING: "$_ID"}} IS TYPE OBJECT
Nick
а запрос в чем выполняется?
🌀Andrei
Драйвер mongoskin
Nick
версия монги?
Nick
синтаксис лупак с пайплайном появился в 3.6
Nick
https://docs.mongodb.com/manual/reference/operator/aggregation/lookup/#join-conditions-and-uncorrelated-sub-queries
Slava
Добрый вечер, помогите, пожалуйста. Недавно пользуюсь MongoDB, и до этого проблем не было, работал на localhost. Сейчас потребовалось соединиться с базой, мне дали такую строчку, но не понимаю, куда ее вводить, пробовал в mongo cmd - не работает. mongodb+srv://gkola2:<password>@gkolal-nm3q3.mongodb.net/test
Yʉri 🇺🇦
почему монга иногда падает? (раз в пару дней) куда хотя бы смотреть. на скрине последняя часть логов после падения. Есть ощущения что изза нехватки оперативной памяти
Dmitryi
а dmesg что говорит ?
Yʉri 🇺🇦
а dmesg что говорит ?
конкретно монги там не нашел вообще, почему то. но есть пару ошибок "Out of memory" с другими приложенями. а есть способ предотвращения таких случаев кроме повышения памяти? например автоподнятие. потому что такое приходит довольно редко и память редко забивается вся
Artem
надо устранять причину. а не следствие
Dmitryi
Я бы еще посоветовал глянуть на настройки самой монги и сколько она использует памяти для сортировок и агрегаций
yopp
Но вообще странно что там бэктрейс
yopp
Можно ещё покрутить размер кеша WT или отключить OOM, но это все полумеры
Yʉri 🇺🇦
Можно ещё покрутить размер кеша WT или отключить OOM, но это все полумеры
сама монга врядли у меня нагружается. там довольно простое приложение. падает изза других думаю. попробую что нибудь придумать или как сказали перенести в другое место, спасибо. я написал, потому что не был уверен, что изза памяти, мб в логах что было бы понятно, я в них не понял просто ничего
yopp
Нет, из логов ничего не понятно.
yopp
но если на сервере происходят расстрелы в связи с нехваткой памяти, то начинать стоит оттуда
yopp
От докера больше памяти не станет :)
Yʉri 🇺🇦
если туда вынести приложение вместе с монгой
yopp
Докер тут может помочь только если каждому контейнеру дать квоту на память и при условии что приложения будут в эту квоту укладываться.
Yʉri 🇺🇦
Так ООМ же всё подряд убивает, можно как костыль OOMScoreAdjust монге подкрутить
да, плохое решение. лучше буду решать проблему нормально, как сказали🙂
yopp
Но приложения в докере будут видеть объём памяти хоста, а не квоту контейнера. Так что это может вызвать другие проблемы
Yʉri 🇺🇦
хм, а в логах монги такое есть. это не изза отсутствия места на самом сервере? но у меня её вроде достаточно🤔
Nick
да тут точно нехватка места на диске
Yʉri 🇺🇦
судя по времени монга как раз и падает когда у меня бекап на сервере делался, в то время похоже бекап забивал всю память на диске, пока старый не удалился ещё
Konstantin
Приветствую. В какую сторону мне стоит посмотреть если у меня такой юзкейс: Есть коллекция, и рефы из её документов могут быть в других коллекциях, и нужно считать, допустим, количество рефов на этот документ. Динамически с каждым добавленным/удалённым рефом. doc { _id: {ObjectID} data: {...some data} timesReferenced: {int} } Мнения?
Ilya
yopp, в статьях по Casual Consistancy упоминается про ролл бэке, неасмотря на то, что речи о транзакциях здесь нет. В частности, при записи чего либо в read cocern w: 1 может возникнуть чтение данных, которые были откачены. То есть данные пришли на primary, там сохранились и дальше, к примеру, начала выполняться операция чтения. В то же время происходит репликация на слейвы, в процессе которой может что-то пойти не так и произойдет ролл бэк?