Под капотом там вообще говоря очень много интересного сделано. К примеру, те же самые числа, которым присваиваются значения от нуля до какого-то значения (255? точно не помню) ссылаются на один и тот же объект в памяти, который создаётся при инициализации интерпретатора. Т.е. все переменные в программе, которым присвоено, скажем, 10 будут ссылками на один объект и реального выделения памяти не будет. Хоть миллиард переменных создай. А вот для остальных чисел уже реально выделяется память.
Сделано это, так же как и со строками, в целях оптимизации производительности.
> так как монго стремится все хранить в памяти
Там memory-mapped файлы и на диск реально пишет ОС, так что если движок БД произведёт обновление, то и на диск упадёт повторно тоже самое.
> да и какая вам разница запишет или нет
Ёпт! Так это вы у топикстартера спросите. Но вопрос именно про это - насилуется диск или нет. И про то, что в доках там об этом не написано, а вы говорите "чёрным по белому" :)
Мне не лень, но по вашей ссылке тоже нету чёткого ответа.
Тут ведь стоит вопрос о том, есть ли в дебрях движка БД оптимизация, которая прежде чем обновить документ, проверяет а нужно ли его реально обновлять и нужно ли лишний раз насиловать диск.
@opium вы о каких главах? Тут docs.mongodb.org/manual никаких глав нету. Так что давайте ссылку, где там об этом конкретно написано, раз вы так в этом уверены.
> Я сам ответил на свой вопрос, никто так и не помог толком
Прозвучало как минимум 2 ответа: от @mkharitonov и от меня (с примером кода). Если не умеете слушать людей, которые вам отвечают, то тостер вам мало чем поможет и впредь.
Это самое простое решение "в лоб" и обычно оно применимо только для работы с небольшими изображениями. Существуют ещё и более сложные методы записи/чтения изображений без необходимости их предварительной полной распаковки в память. Это семейство так-называемых scanline-методов, которые работают с изображениями построчно, загружая в память лишь одну строку пикселей.
В таком случае, вопрос наверное нужно отметить как решённый ;)
> А как быть
Рефакторить. Всегда можно что-то придумать, вынести общий код в отдельный модуль, к примеру.