Должен ли я динамически воссоздавать PDF, а не хранить его в базе данных или файловой системе? - PullRequest
6 голосов
/ 23 октября 2008

Мне нужно, чтобы клиенты могли загружать отправленные им письма в формате PDF.

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

Что я хочу знать:

  • будет ли разумной альтернативой просто сохранить информацию о письме в базе данных и воссоздать PDF "на лету", когда он будет запрошен?
  • Этот подход превосходит или уступает извлечению PDF из файловой системы?

Ответы [ 8 ]

9 голосов
/ 23 октября 2008

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

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

3 голосов
/ 23 октября 2008

Я бы сохранил его по двум причинам

1) Если вы когда-нибудь измените способ создания PDF-файла, вы, вероятно, не захотите изменять исторические элементы. Если вы генерируете их каждый раз, либо они изменятся, либо вам потребуется сохранить код совместимости для создания записей «старого стиля»

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

Очевидно, что если вы создадите тысячи таких в час из разреженного набора данных, у вас может не хватить хранилища. Но если у вас есть место, я бы проголосовал за «использовать его» * ​​1007 *

2 голосов
/ 23 октября 2008

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

0 голосов
/ 23 октября 2008

Пока документ PDF имеет постоянный характер (не просто рабочий документ, а что-то официальное, подписанное и отправленное куда-то еще в компании или за ее пределами), у вас должна быть копия этого документа. Файл PDF в вашей сети и ссылка на этот файл в вашей базе данных.

Вы не можете полагаться на имеющиеся данные для воспроизведения того же документа в другое время, главным образом потому, что:

  1. Данные могут быть изменены (да! Предположим, что письмо считается подписанным руководителем департамента, а персонал изменился?)
  2. Будет изменен формат вашего отчета (верхний колонтитул, нижний колонтитул, логотип и т. Д.)
  3. Созданный вами документ хранится кем-то еще, кто будет использовать данные, имеющиеся в документе.
0 голосов
/ 23 октября 2008

Вопрос о том, генерировать ли PDF-файлы динамически или хранить их статически, звучит скорее как вопрос права, чем как вопрос программирования.

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

0 голосов
/ 23 октября 2008

Мало что следует учитывать, является ли PDF-файл генерируемым на основе данных, существовавших в определенный момент времени. НАПРИМЕР. счет на основе данных за предыдущий месяц?

Если это так, будете ли вы использовать один и тот же шаблон каждый месяц для создания этого письма? Что произойдет, если / когда формат письма изменится, если вы регенерируете на лету, он уже не тот, который был им отправлен. Возможно ли сохранить поток PDF в базе данных?

Я думаю, к чему я клоню, вам нужно точное представление о том, что было отправлено пользователю, или это гибко?

0 голосов
/ 23 октября 2008

Если вы используете ASP.NET, почему бы не кэшировать PDF. Ваш кеш может храниться в базе данных, если вам нравится, или оставить в памяти до тех пор, пока вам это может понадобиться в первую очередь. Корпоративная библиотека реализует это для вас в блоке приложения для кэширования, и она удивительно проста в использовании. Если вы кешируете объект, создайте хранилище в базе данных, используя блок, а затем загрузите его, когда вам это понадобится, вам не придется беспокоиться о его повторном создании.

0 голосов
/ 23 октября 2008

Я склонен сказать «это зависит».

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...