Доброй ночи. Подскажите, пожалуйста, по такому вопросу. С mongoDB на

вы, но партия сказала решить задачу.

Есть БД, в ней коллекция binary_files, обычная файлопомойка. Файлы достаются редко и хорошо поддаются сжатию, поэтому, в целях экономии места решили их хранить в сжатом виде, а потом при запросе уже восстанавливать исходный файл.

Был написан скрипт, который прошёлся по всем записям в коллекции, извлёк старые бинарные данные, удалил их, положил новые, сжатые. Все работает.

После заметил, что вместо того, чтобы получить экономию места, наоборот, размер БД увеличился, проверил это командой show dbs и сам .wt файл распух.

Нагуглил в интернете, что монга не очищает место после удаления записи, а "переиспользует" его. Поправьте меня, пожалуйста, если я не прав.

Теперь вопрос - это нормальное поведение и это освобождённое место будет переиспользовано или как-то можно пересчитать и по-настоящему почистить данные?

Выигрыш в результате компрессии достаточно весомый, поэтому хотелось бы узнать, как правильней поступить в этой ситуации.

Надеюсь, я объяснил все понятно.

4 ответов

21 просмотр

>Теперь вопрос - это нормальное поведение и это освобождённое место будет переиспользовано Да > или как-то можно пересчитать и по-настоящему почистить данные? https://docs.mongodb.com/manual/reference/command/compact/

если у вас данные хорошо жмутся, то ожидаемо включенная по дефолту компрессия же сжимала данные достаточно и сдается мне, что ваш алгоритм просто хуже дефолтного snappy на ваших данных

Iskander-R Автор вопроса
h1dw0w
>Теперь вопрос - это нормальное поведение и это ос...

Спасибо, изучаю. @yatoba , нет, мы все посчитали перед запуском скрипта, а также проверяли на тестовых данных, сжатие должно было дать эффект и он есть. Если интересно, то отпишусь позже, как запустим compact.

Iskander R
Спасибо, изучаю. @yatoba , нет, мы все посчитали п...

Если snappy хуже сжимает данные, то вы можете попробовать классический zlib или фейсбуковский zstd. snappy предназначен для good enough компрессии с низким memory & computational cost

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
1. https://www.kaggle.com/code/ahmadrezagholami2001/housing-estimation-linear-regression 2. https://www.kaggle.com/code/ahmadrezagholami2001/uncovering-quality-in-wines-logis...
Ahmadreza
1
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта