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

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

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

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

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

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

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

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

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

4 ответов

18 просмотров

>Теперь вопрос - это нормальное поведение и это освобождённое место будет переиспользовано Да > или как-то можно пересчитать и по-настоящему почистить данные? 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

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

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

Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта