Рекомендации по дедупликации для хранения электронной почты
Предлагаемая модель хранения заключается в том, чтобы хранить вложения в отдельных файлах (или больших двоичных объектах) и сохранять само сообщение электронной почты в виде составного сообщения MIME со ссылками на вложенный файл и его кодировку. Это позволяет пользователю показывать оригинал, но не требует от меня фактического сохранения менее эффективного base64 с сообщением. Большую часть времени я смогу хранить только длину строки base64, которая была использована.
Таким образом, мы можем выполнить дедупликацию на уровне вложений.
Но как дедупликация может пойти дальше? Вот мои мысли:
- Все вложения и электронные письма могут быть сжаты (дедуплицированы на уровне байтов), конечно, индивидуально.
- Я мог бы сжать наборы из 12 вложений в один файл. Сжатие нескольких файлов одного типа (например, PDF-файлов), даже файлов одного отправителя, может быть более эффективным.
- Сообщения MIME также могут быть сжаты в наборах.
- Я не обеспокоен эффективностью поиска, потому что будет использоваться полнотекстовая индексация.
- При поиске электронных писем, конечно, использовался бы тип полнотекстовой индексации, который не был бы сжат.
- Распакованный кеш будет создан при первом поступлении электронного письма и будет удален только после того, как электронное письмо не будет просмотрено какое-то время.
Есть ли у вас какие-либо советы в этой области? Что является нормальным для системы хранения электронной почты?
1 ответ
- декодировать все части mime base64, а не только вложения
- вычислить безопасный хэш его содержимого
- замените часть ссылкой в теле письма или создайте собственный заголовок со списком извлеченных частей пантомимы
- хранить в хранилище BLOB-объектов под безопасным хэшем (хранилище с адресуемым содержимым)
- используйте счетчик ссылок для удаления и сборки мусора или более умный двойной счетчик (https://docs.wildduck.email/#/in-depth/attachment-dedupplication , https://medium.com/@andrewsumin/efficient-storage-how -мы-спустились-с-50-pb-до-32-pb-99f9c61bf6b4)
- или сохранить каждое ссылочное отношение hash-emailid в БД
- тщательно проверяйте и контролируйте сгибы base64, некоторые электронные письма имеют более короткую строку посередине, некоторые имеют дополнительные символы (точка, пробел) в конце
- хранить параметры кодирования (складки, хвост) в ссылке в теле письма для точной реконструкции
- сжимайте сжимаемые вложения, будьте осторожны с адресуемым хранилищем содержимого, поскольку сжатие изменяет его хэш содержимого
- JPEG-изображения могут быть значительно сжаты без потерь с использованием JPEG XL или https://github.com/dropbox/lepton.
- wav-файлы можно сжимать с помощью flac и т. д.
- тип содержимого указан отправителем, одно и то же вложение может иметь разные типы содержимого
- цитируемые печатные закодированные части трудно точно декодировать и реконструировать. Есть много параметров кодировщика, потому что каждый кодировщик экранирует разные символы и линии сгиба по-разному.
- Будьте осторожны с форматом ссылки, чтобы злоумышленник не мог создать электронное письмо со ссылкой и получить вложение, которое ему не принадлежит. Или обнаружить и избежать ссылки в полученных электронных письмах
- небольшие части пантомимы, возможно, не стоит извлекать, пока в системе не появится определенное количество дубликатов.