Подтвердить что ты не робот

Сохранение почтовых сообщений в базе данных

Какую схему базы данных вы использовали бы для хранения сообщений электронной почты с такой же информацией о заголовках, насколько это возможно/возможно, в базу данных?

Предположим, что они были отправлены в script из MTA и проанализированы в соответствующих заголовках/телах/вложениях.

Вы сохранили бы тело сообщения целиком в таблице базы данных или разделили бы части MIME на части? Как насчет прикреплений?

4b9b3361

Ответ 2

Зависит от того, что вы собираетесь с ним делать. Если вам понадобится частый поиск с определенными битами, вы захотите разбить его таким образом, который имеет смысл для вашего случая использования. Если это просто для хранения электронной почты для соответствия Sarbanes-Oxley, вы, вероятно, будете хорошо хранить все это - заголовки, части и т.д. - как одно большое текстовое поле.

Ответ 3

Предложение: создать хорошо определенную таблицу для хранения электронной почты с столбцом для каждой соответствующей части сообщения: отправителя, заголовка, темы, тела. Это будет намного проще позже, если вы хотите запросить, например, поле subject. В той же таблице вы можете определить поле для сохранения пути вложения и сохранить прикрепленный файл в файловой системе, а не хранить его в полях blob.

Ответ 4

Возможно, вы захотите использовать схему, в которой сообщения сообщения и записи вложений могут использоваться совместно несколькими получателями сообщения. Это не редкость видеть серверы электронной почты, где на 50% дискового хранилища используются дублированные электронные письма.

Простой хэш тела/вложения будет достаточно, чтобы увидеть, была ли эта запись уже в базе данных. Однако вам все равно придется хранить отдельные заголовки.

Ответ 5

Все зависит от того, что вы хотите делать с данными, но в целом я хотел бы сохранить все данные, а также убедиться, что семантика, интерпретируемая MUA, сохраняется в db, например: - Все обработанные заголовки должны иметь свою колонку - столбец должен содержать целые заголовки - Вложения (включая тело, multipart) должны быть в таблице с таблицей "один-два стола".

Ответ 6

Вероятно, вы захотите, по крайней мере, хранить вложения отдельно для оптимизации хранилища. Удивительно видеть размер и количество вложений (видео и т.д.), Которые большинство пользователей недвусмысленно присоединяются к электронным письмам.

В случае исходящих писем у вас может быть несколько писем, отправляющих одно и то же приложение. Гораздо эффективнее хранить одну копию вложения, на которую ссылаются все электронные письма, которые ее используют.

Еще одна причина для хранения вложений в отдельности заключается в том, что он дает вам некоторые варианты архивации позже. Если пространство для хранения данных становится проблемой, вы всегда можете вернуться назад и удалить большие вложения старше установленной даты, чтобы сжать базу данных.

Ответ 7

Важным шагом в разработке схемы базы данных является выяснение того, какие типы объектов вы хотите моделировать. Для этого приложения объекты могут быть:

  • Сообщения
  • Адреса электронной почты
  • Разговорные потоки (возможно: если вы хотите эффективно выполнять потоки)
  • Вложения (возможно: как предложено в других ответах)
  • ...

Как только вы узнаете сущности, вы можете определить отношения между объектами, которые могут быть представлены таблицами:

  • Сообщения имеют много-много отношений к сообщениям (In-Reply-To и References).
  • Сообщения имеют много-много отношений к адресам электронной почты (From, To, Cc и т.д.).
  • Сообщения имеют много отношений с потоками.
  • Сообщения имеют много-много отношений с вложениями.
  • ...

Ответ 8

Если он уже разделен, и вы можете быть уверены, что подпрограмма разделения данных будет звуковой, тогда я бы разделил таблицу как можно более подробно. Вы всегда можете разобрать его вместе в своем среднем ярусе. Если пространство не является проблемой, вы всегда можете сохранить его дважды. Один, разделенный на соответствующие поля, и другое поле, в котором есть все, что является одним блобом, если его собрать вместе сложно.

Ответ 9

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

/Allan