2008-09-15 6 views
1

Je suis sur le point d'implémenter une fonctionnalité dans notre application qui permet à l'utilisateur de «télécharger» un document PDF ou Microsoft PowerPoint, que l'application mettra ensuite à la disposition des autres utilisateurs dans une visionneuse. télécharger 'dans le sens' Enregistrer sous .. '). Je sais déjà comment sauvegarder et récupérer des informations binaires arbitraires dans les colonnes de la base de données, mais comme il s'agit d'une fonctionnalité couramment utilisée dans notre application, je crains que cette solution ne conduise à des bases de données extrêmement volumineuses (comme nous le connaissons). voudra mettre la vidéo dans des documents PowerPoint).Quel est le meilleur moyen d'enregistrer et de récupérer des fichiers binaires avec Oracle 10g?

Je sais qu'il existe un moyen de créer un objet 'directory' dans Oracle, mais est-il possible d'utiliser cette fonction pour stocker et récupérer des fichiers binaires enregistrés ailleurs sur le serveur de base de données? Ou est-ce que je suis trop paranoïaque à propos de la taille de la base de données?

(pour l'intégralité de notre application est .Net WinForms à l'aide CoreLab/DevArt OraDirect.Net drivers à Oracle 10g)

Merci pour votre aide: o)

Répondre

5

Couple d'options: Vous pouvez mettre la colonne blob dans son propre espace de table, avec ses propres caractéristiques de stockage; vous pouvez stocker les BLOB dans leur propre table, liée à l'autre table par une colonne ID. Dans les deux cas, comme vous l'avez suggéré, vous pouvez définir la colonne en tant que BFILE, ce qui signifie que le fichier réel est stocké à l'extérieur de la base de données dans un répertoire. Ce qui peut poser problème, c'est que les objets BFILE ne participent pas aux transactions et ne sont pas récupérables avec le reste de la base de données.

Tout cela est discuté dans l'Oracle 10gR2 référence SQL, chapitre 2, à partir de la page 23.

1

Je suppose que cela dépend de ce que vous considérez énormément grand.

Cela dépend vraiment du cas d'utilisation. Si les documents ne sont que rarement consultés, il suffit de les mettre dans la base de données (avec l'avantage d'obtenir des sauvegardes "gratuites", par exemple avec la base de données).

Si ce sont des fichiers qui vont être frappé encore et encore, vous pourriez être mieux de les mettre directement sur le disque et juste stocker l'emplacement, ou même (si sa bande passante très haut) regarder dans quelque chose comme MogileFS

Personne ne sera en mesure de vous répondre par oui ou par non pour cela.

1

Vous pouvez utiliser un type de colonne LOB normal et définir les paramètres de stockage pour ce champ afin qu'il se trouve dans un espace de table distinct. Créez un espace de table quelque part capable de traiter d'énormes quantités de données et minimisez l'impact. Pour être sérieusement paranoïaque à propos de l'utilisation du disque, vous pouvez également compresser l'espace de table en le marquant comme tel. Quelque chose le long des lignes de:

CREATE TABLESPACE binary_data1 DATAFILE some_san_location DÉFAUT DE STOCKAGE COMPRESS (...)

1

Dans mon expérience, un simple champ VARCHAR2 contenant le nom du fichier des pièces jointes est une meilleure et solution plus facile. La taille du système de fichiers est beaucoup plus facile à gérer que la taille de la base de données.

1

Les données doivent vivre quelque part, que ce soit interne à la base de données ou que vous stockiez simplement un lien vers un chemin d'accès au serveur (serveur), vous mâchez encore de l'espace.

Je viens d'utiliser des champs LOB simples dans le passé, cela semblait fonctionner correctement. Si vous gardez les données dans la base de données au moins, vous gardez vos tracas de sauvegarde bas - vous pouvez avoir beaucoup de données à sauvegarder mais quand vous le restaurez, tout sera là. Séparer le binaire signifie que vous risquez de casser la base de données ou de perdre des données si vous ne faites pas attention à ce que vous sauvegardez.

1

L'une des raisons de stocker simplement le lien ou un ID pouvant être utilisé pour créer le lien est que le stockage que vous utilisez habituellement pour Oracle DB est plutôt coûteux. Si vous avez beaucoup de gros fichiers, il est généralement beaucoup plus rentable de les mettre sur un ensemble de disques moins coûteux.

Questions connexes