Quelle est la différence entre le stockage des données dans un blob, par rapport à stocker un pointeur vers un fichier?
J'ai une question à propos de la blob
type de données dans MySQL.
J'ai lu que le type de données peut être utilisé pour stocker des fichiers. J'ai lu aussi qu'une alternative est de stocker le fichier sur le disque et comprennent un pointeur vers son emplacement dans la base de données (via une colonne de type varchar).
Mais je suis un peu confus car j'ai lu que les champs blob ne sont pas stockés en ligne et besoin d'un look-up pour récupérer son contenu. Donc, est-ce différent que de stocker un pointeur vers un fichier sur le système de fichiers?
OriginalL'auteur user1832628 | 2012-11-17
Vous devez vous connecter pour publier un commentaire.
Selon Manuel MySQL page sur la Goutte, Une
BLOB
est un grand objet binaire qui peut contenir une quantité variable de données.Puisque c'est un type de données spécifique pour stocker des données binaires, il est courant de les utiliser pour stocker des fichiers au format binaire, en cours de stockage des fichiers d'image d'un usage très courant sur les applications web.
Pour les applications web, cela signifierait que vous avez d'abord besoin de convertir votre fichier dans un format binaire et puis le stocker, et à chaque fois vous avez besoin de récupérer votre fichier vous aurez besoin de faire le processus inverse de la conversion de leur retour à son format d'origine.
En outre, le stockage de grande quantité de données dans votre base de données PEUT le ralentir. Spécialement dans les systèmes qui ne sont pas dédiés uniquement à héberger une base de données.
En gardant à l'esprit toutes les considérations ci-dessus, une pratique courante pour les applications web est de stocker vos fichiers ailleurs que votre MySQL, puis il suffit de stocker le chemin d'accès à votre base de données. Cette approche PEUT la vitesse de votre base de données lorsque l'on traite avec une grande quantité de données.
En fait, cela dépendra de ce moteur de stockage que vous utilisez, car chaque moteur traite les données et les stocke dans différentes manières. Pour le moteur InnoDB, qui est adapté pour la base de données relationnelle, vous pouvez lire cet article de Des Performances MySQL blog sur la façon dont le blob est stockée dans le serveur MySQL.
Mais en résumé, sur MySQL 5 et avant le blob est stocké comme suit:
Donc, vous pensez probablement maintenant que la bonne façon de faire est de les stocker en tant que fichier séparé, mais il ya certains avantages de l'utilisation de blob pour stocker des données, le premier (à mon avis) est la sauvegarde. Je gère un petit serveur et j'ai dû créer un autre sous-routine à faire une copie de mes fichiers stockés comme des chemins vers un autre disque de stockage (Nous n'avons pas les moyens d'acheter un décent système de sauvegarde sur bande). Si j'avais conçu mon application à utiliser des gouttes d'un simple
mysqldump
serait tout ce que je nécessaire à la sauvegarde de ma base de données entière.L'avantage du stockage d'objets blob pour les sauvegardes sont traités dans ce post où la personne qui a répondu a eu un problème similaire au mien.
Un autre avantage est la sécurité et la facilité de gestion d'autorisation et d'accès. Toutes les données à l'intérieur de votre serveur MySQL est protégé par mot de passe et vous pouvez facilement gérer les autorisations pour vos utilisateurs qui ont accès à ce qui n'en a pas.
Dans une application qui s'appuie sur MySQL privilèges système pour l'authentification et l'utilisation. Il est certain qu'un plus, car il serait un peu plus difficile pour disons un envahisseur de récupérer une image (ou d'un fichier binaire comme une zippée une) à partir de votre disque ou d'un utilisateur sans privilèges d'accès pour y accéder.
Je dirais donc que
Si tu vas gérer vos bases de données MySQL et toutes les données que vous avez en elle et elle doit faire des sauvegardes régulières ou ont l'intention de modifier ou même d'envisager un futur changement d'OS, et avoir un matériel décent et optimisé de votre serveur MySQL à elle, allez-GOUTTE.
Si vous ne gérer votre base de données MySQL (comme dans un hébergeur par exemple) et n'a pas l'intention de changer de système d'exploitation, ou de faire des sauvegardes, bâton avec
varchar
colonnes pointant vers vos fichiers.J'espère que cela a aidé. Cheers
OriginalL'auteur Bruno Vieira
Si vous stockez des données est champ BLOB, vous faire partie de votre objet de l'abstraction.
BLOB avantages:
Si vous souhaitez supprimer la ligne BLOB, ou de la supprimer dans le cadre du master/slave de relation de table ou peut-être l'ensemble du tableau de la hiérarchie, votre BLOB est géré automatiquement et a la même durée de vie que tout autre objet dans la base de données.
Vos scripts n'ont pas besoin d'avoir accès à quelque chose, mais la base de données pour obtenir tout ce dont ils ont besoin. Dans de nombreuses situations, avoir directement accès au fichier ouvert toute la boîte de pandore sur la façon de contourner l'accès ou des restrictions de sécurité. Par exemple, l'accès aux fichiers, ils peuvent avoir à monter les systèmes de fichiers qui contiennent des fichiers réels. Mais avec de BLOB dans la base de données, vous n'avez qu'à être en mesure de se connecter à la base de données, n'importe où vous êtes.
Si vous le stocker dans un fichier et fichier est remplacé, retiré ou n'est plus accessible, votre base de données ne sait jamais, en effet, on ne peut pas garantir l'intégrité. Aussi, il est difficile de correctement prendre en charge plusieurs versions lors de l'utilisation de fichiers. Si vous utilisez et dépendent de transactions, il devient presque impossible.
Fichier avantages:
Certaines bases de données poignée de Gouttes plutôt mal. Par exemple, alors que les officiels de BLOB limite dans MySQL est de 4 go, mais en réalité c'est seulement 1 MO dans la configuration par défaut. Vous pouvez augmenter ce-16-32 MO en jouant à la fois le client et le serveur de configuration pour augmenter MySQL tampon de commande, mais cela a beaucoup d'autres implications en termes de performance et de sécurité.
Même si la base de données n'a pas un peu bizarre de limite de taille, il auront toujours une surcharge dans le stockage d'objets BLOB, comparativement à seulement un fichier. Aussi, si BLOB est grand, certaines bases de données ne fournissent pas d'interface pour accéder à goutte pièce par pièce, ou
stream
, ce qui peut être grand obstacle pour votre flux de travail.En fin de compte, c'est à vous. En général, je essayer de le garder dans un BLOB, à moins que cela crée déraisonnable des problèmes de performances.
OriginalL'auteur mvp
Oui, MySQL gouttes qui ne cadrent pas dans la même page que une ligne et stockés sur le dépassement des pages de Noter que quelques gouttes sont petites qu'elles sont stockées avec le reste de la ligne, comme n'importe quelle autre colonne. Le blob de pages ne sont pas adjacentes à la page de leur ligne est stocké, donc ils peuvent entraîner des e/S supplémentaires pour les lire.
Sur l'autre main, comme avec tout autre type de page, pages blob peut occuper la mémoire dans la InnoDB pool de mémoire tampon, de sorte que la lecture de la blobs par la suite est très rapide, même si elles sont sur des pages séparées. Les fichiers peuvent être mis en cache par le système d'exploitation, mais en général, elles sont lues à partir du disque.
Voici quelques autres facteurs qui peuvent influer sur votre décision:
Gouttes sont stockées de façon logique avec une ligne. Cela signifie que si vous SUPPRIMEZ la ligne, le blob est automatiquement supprimé. Mais si vous stockez le blob à l'extérieur de la base de données, vous vous retrouvez avec des orphelins fichiers blob après la suppression des lignes de la base de données. Vous devez faire les étapes manuelles pour trouver et supprimer ces fichiers.
Gouttes stockées dans la ligne aussi suivre la sémantique de transaction. Par exemple, un nouveau blob ou une mise à jour de blob est invisible pour les autres opérations jusqu'à ce que vous vous engagez. Vous pouvez également annuler une modification. Stockage d'objets blob dans les fichiers à l'extérieur de la base de données qui rend ce beaucoup plus difficile.
Lorsque vous sauvegardez une base de données contenant les gouttes, la base de données est beaucoup plus grand, bien sûr, mais lors de la sauvegarde, vous aurez toutes les données et associés gouttes en une seule étape. Si vous stockez des gouttes à l'extérieur, vous devez sauvegarder la base de données et de sauvegarder le système de fichiers dans lequel vous stockez les fichiers blob. Si vous devez vous assurer que les données et les blobs sont capturées à partir d'un instantané dans le temps, vous devez utiliser un certain type de système de fichiers instantanés.
Si vous utilisez la réplication, la seule façon automatique de garantir les gouttes d'avoir copié à l'esclave de réplication automatiquement est de stocker des objets blob dans la base de données.
OriginalL'auteur Bill Karwin
La meilleure approche est de stocker vos fichiers dans le système de fichiers de dossiers et d'indiquer à leurs chemins à travers un champ de type varchar dans la base de données. L'un des inconvénients de l'enregistrement de fichiers dans la base de données est en le ralentissant ou de réduire ses performances.
Si vous parlez du dossier de séparation / ou \ tout une simple requête sql ou script de migration en mesure de modifier tous les records. En plus si c'est une application web, communément les chemins relatifs sont stockées.
Sauvegarde d'une base de données avec des dizaines ou des centaines de GO de fichiers intégré dans celui-ci n'est pas amusant du tout. La sauvegarde d'un système de fichiers avec plusieurs to de données sur c'est facile avec
rsync
.Et à côté de ça, des dossiers et des modifications de dispositions à travers des Systèmes d'exploitation de la décision de dur, quand on serait tout simplement être résolu avec un mysqldump
Salut, merci pour les réponses. Mais je suis toujours confus sur un aspect. Si la goutte contient un pointeur vers l'emplacement d'un fichier, comment est-ce différent à l'aide d'un varchar pour stocker un pointeur vers le fichier sur le disque? Désolé si ma question n'est pas claire, je ne suis pas trop familier avec le côté matériel des choses.
OriginalL'auteur SaidbakR
Fichiers sera plus rapide que par le biais de la base de données. Des gouttes de colonnes ont quelques inconvénients en termes d'indexation/tri etc, que vous pouvez faire avec votre colonne nom de fichier si vous souhaitez à l'avenir.
La base de données peut également se développer rapidement avec de grosses gouttes et ensuite tâches comme la sauvegarde de devenir plus lent. Je voudrais aller avec un emplacement de fichier dans la base de données avec le stockage physique sur le système de fichiers.
OriginalL'auteur Science_Fiction