En ce qui concerne PostgreSQL est concerné, tapez text
est hors de question. Il est plus lent, utilise plus d'espace et est plus sujet aux erreurs que bytea
dans le but.
Il existe essentiellement 3 approches :
-
Utilisez le type
bytea
(essentiellement l'équivalent pg du type SQL blob). -
Utilisez des "gros objets ".
-
Stocker les blobs sous forme de fichiers dans le système de fichiers et ne stocker que le nom du fichier dans la base de données.
Chacun a ses propres avantages et inconvénients.
1. est assez simple à gérer mais nécessite le plus d'espace disque. Un décodage et un encodage sont nécessaires, ce qui le rend également lent. Les sauvegardes grossissent rapidement !
2. est un peu difficile à manipuler, mais vous avez votre propre infrastructure pour manipuler les blobs - si vous en avez besoin. Et vous pouvez plus facilement effectuer des sauvegardes séparées.
3. est de loin le moyen le plus rapide et utilise le moins d'espace disque. Mais il ne fournit pas l'intégrité référentielle que vous obtenez lorsque vous stockez dans la base de données.
J'ai un certain nombre d'implémentations comme celle-ci pour les fichiers image :stocker une petite vignette dans un champ bytea pour l'intégrité référentielle et une référence rapide. Stockez l'image originale en tant que fichier dans le système de fichiers. Bien sûr, vous devez réfléchir au moment et à la manière de supprimer les fichiers obsolètes, à la sauvegarde des fichiers externes, etc.