Devrais-je recréer de manière dynamique un PDF plutôt que de le stocker dans la base de données ou dans le système de fichiers?

StackOverflow https://stackoverflow.com/questions/227727

Question

J'ai besoin que les clients puissent télécharger les fichiers PDF des lettres qui leur ont été envoyées.

J'ai lu les discussions sur le stockage de documents ou d'images entre bases de données et systèmes de fichiers, et il semblerait que le consensus est que, pour quelque chose de plus que quelques images, le système de fichiers est la solution.

Ce que je veux savoir:

  • Une autre solution raisonnable serait-elle simplement de stocker les détails de la lettre dans la base de données et de recréer le PDF "à la volée" à la demande?
  • Cette approche est-elle supérieure ou inférieure à celle d'extraire le fichier PDF du système de fichiers?
Était-ce utile?

La solution

Je le stocker pour deux raisons

1) Si jamais vous modifiez la façon dont vous générez le PDF, vous ne voudrez probablement pas que les éléments historiques changent. Si vous les générez à chaque fois, ils changeront ou vous devrez conserver un code de compatibilité pour générer "old-style". enregistrements

2) L'espace disque est bon marché. La patience de l'utilisateur n'est pas. Sauf si vous êtes vraiment pressé pour le stockage ou qu'il est plus difficile de générer un fichier PDF, soyez gentil avec vos utilisateurs et stockez-le.

Évidemment, si vous en créez des milliers une heure à partir d'un jeu de données fragmenté, vous risquez de ne pas disposer de la mémoire. Mais si vous avez la place, je voterais pour "l'utiliser"

Autres conseils

Si c'est à des fins d'archivage, je stockerais certainement le PDF car, à l'avenir, votre script de génération de PDF risque de changer et la lettre ne sera plus exactement la même que celle envoyée à l'origine. Le client s'attendra à ce qu'il soit exactement le même.

Peu importe quelle approche est supérieure, il est parfois préférable d’opter pour une approche plus sûre.

Existe-t-il une raison pour laquelle vous devez conserver des enregistrements de lettres envoyées aux clients? Si vous envisagez de vous régénérer à la volée, comment savez-vous que les modifications de code futures ne réécriront pas la lettre (ou, au moins, le client peut faire valoir cet argument devant les tribunaux si les informations sont utilisées dans le cadre d'une action en justice) ...

Je suis enclin à dire "ça dépend".

Lorsqu'un document est demandé à plusieurs reprises, cela peut constituer une sauvegarde si vous le composez à la première demande et que vous le récupérez ultérieurement.

OTOH: si la plupart des demandes de document sont du type "une seule fois" et que le processus de création n’absorbe pas la majeure partie de la capacité de votre serveur, vous bénéficierez d’un avantage certain à la volée.

Si vous utilisez ASP.NET, pourquoi ne pas mettre le PDF en cache? Votre cache peut être stocké dans la base de données si vous le souhaitez ou laissé en mémoire aussi longtemps que vous en avez besoin au préalable. La bibliothèque d'entreprise l'implémente pour vous dans le bloc d'application de mise en cache et se distingue par sa simplicité d'utilisation. Si vous mettez l'objet en cache, créez un stockage dans la base de données à l'aide du bloc, puis chargez-le quand vous en avez besoin. Vous n'aurez plus à vous soucier de le recréer.

Peu de choses à considérer, le PDF généré est basé sur les données telles qu’elles existaient à un moment donné. PAR EXEMPLE. un projet de loi basé sur les données du mois précédent?

Si oui, utiliseriez-vous le même modèle chaque mois pour générer cette lettre? Que se passe-t-il si / lorsque le format de la lettre change, si vous vous régénérez à la volée, ce n'est plus le même qui leur a été envoyé. Est-il possible de stocker le flux PDF dans la base de données?

Je suppose que je veux en venir, avez-vous besoin d'une représentation exacte de ce qui a été envoyé à l'utilisateur, ou est-ce flexible?

La question de savoir si les fichiers PDF doivent être générés dynamiquement ou stockés de manière statique ressemble davantage à une question de droit qu’à une question de programmation.

Si vous n'avez pas accès à un conseil juridique qui puisse vous guider, il sera beaucoup plus prudent de faire preuve de prudence et de le stocker de manière statique.

Tant que le document PDF est de nature permanente (non seulement un document de travail, mais un document officiel signé et envoyé ailleurs dans l'entreprise ou à l'extérieur de l'entreprise), vous devez en avoir une copie. ce fichier PDF sur votre réseau et un lien vers ce fichier dans votre base de données.

Vous ne pouvez pas compter sur les données disponibles pour reproduire le même document à un moment différent, principalement pour les raisons suivantes:

  1. Les données peuvent être modifiées (oui! supposons que la lettre soit réglée pour être signée par le chef de département et que le personnel ait changé?)
  2. Le format de votre rapport va changer (en-tête, pied de page, logo, etc.)
  3. Le document que vous avez produit est conservé par quelqu'un d'autre qui utilisera les données disponibles dans le document.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top