Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2011, 14h24   #1
Nouveau Membre du Club
 
Inscription : mai 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 56
Points : 32
Points : 32
Par défaut BLOB ou BFILE, lequel est le mieux ?

Bonjour,

J'ai une question sur la structure d'une table sous Oracle 10g et 11g, mon application stocke nativement des fichiers en base comme blob dans une table tab_file:
Code :
1
2
3
4
5
CREATE TABLE tab_file
(
     m_INDEX VARCHAR2 (10) DEFAULT 'IGNORE' NOT NULL       
    ,m_FILE BLOB DEFAULT empty_blob()
);
Un projet prévoit d'importer 21 000 000 de fichiers (donc autant d'entrées dans cette table).
Chaque fichier aura une taille de moins de 500Ko en moyenne.

La question est de savoir si Oracle tiendra la charge ?
Et surtout faut-il modifier le stockage des fichiers blobs en passant par des BFILE, si oui, quel est impact en terme de performance, requêtage, indexation, sauvegarde, etc ...

Merci pour vos avis
Zugg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 15h14   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 387
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 387
Points : 3 272
Points : 3 272
Avec le BFILE se pose le problème de la synchronisation entre les métadonnées (chemins stockés en base) et les données réelles, notamment lors des sauvegardes, mais aussi à tout moment. Si un fichier est supprimé/déplacé au niveau de l'OS, la base n'en sait rien.

Le BFILE peut être au contraire une exigence si vos fichiers ont un contenu qui doit évoluer, et qui est modifié par des moyens externes à la base.

Le BLOB a un véritable intérêt à mon sens si la table comporte d'autres colonnes que le BLOB, qui vont être demandées lors du SELECT, alors que le BLOB ne sera la plupart du temps pas sélectionné. Comme le BLOB est un segment autonome, il n'est chargé en mémoire que s'il fait partie des colonnes appelées dans le SELECT.
(Par exemple, une table EMPLOYE dans laquelle il y aurait de nombreuses colonnes, dont une PHOTO qui est un BLOB).

Or vous semblez être dans le cas contraire : en dehors du BLOB, il n'y a rien dans votre table.

Citation:
Envoyé par Zugg Voir le message
Chaque fichier aura une taille de moins de 500Ko en moyenne.
La question est de savoir si Oracle tiendra la charge ?
La question pourrait aussi être de savoir si l'OS tiendra la charge... Sauvegarder 21 millions de petits fichiers, ça n'est pas forcément une sinécure pour un OS, et ça prend généralement un temps démesuré par rapport au volume.


Voilà, en espérant que ces réflexions vous aident à choisir...
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/09/2011, 15h32   #3
Nouveau Membre du Club
 
Inscription : mai 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 56
Points : 32
Points : 32
Merci Pomalaix,
Sur la table j'ai d'autres colonnes et en effet si aucune requête ne demande la BLOB, le temps de requêtage ne devrait pas être impacté par cette volumétrie.

Je suis tout à fait d'accord sur le problème d'accès aux fichiers dans le cas d'utilisation de BFILE, on peut les supprimer sans que la base ne soit au courant.

Par contre concernant l'utilisation de BLOB, faut-il mieux ajouter une contrainte de stockage pour les stocker dans un tablespace à part ? Faut-il découper le tablespace en plusieurs datafiles ?
Déjà niveau stockage, un BIGFILE me semble obligatoire, non ?

Merci
Zugg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 16h12   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 387
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 387
Points : 3 272
Points : 3 272
Compte tenu de vos chiffres, on est dans une volumétrie de l'ordre de 10 To.

Il faut trouver le découpage bien dosé pour que les fichiers gardent une taille raisonnable permettant de les sauvegarder/restaurer en un temps acceptable, et un nombre de fichiers total n'excédant pas, je dirais, 2 ou 300.

Dans l'absolu, 10 To peuvent tenir à l'aise dans l'unique fichier d'un tablespace BIGFILE, mais je doute qu'un tel fichier soit aisément manipulable.
Vous allez probablement avoir du partitionnement qui va déjà conduire à un premier découpage des tablespaces. Il faudra voir si la taille individuelle de ces tablespaces permet que chacun soit constitué d'un fichier unique ou non.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/09/2011, 09h09   #5
Nouveau Membre du Club
 
Inscription : mai 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 56
Points : 32
Points : 32
Merci Promalaix pour ces avis.

Je vais en effet voir pour du partionnement et faire une évaluation de la volumétrie pour trouver le bon découpage pour les fichiers de données.

Mais en effet tout mettre dans un seul fichier BIGFILE ne semble pas être la meilleure solution en ce qui concerne les sauvegardes et restaurations.
Zugg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 12h52   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 926
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 926
Points : 4 547
Points : 4 547
Citation:
Mais en effet tout mettre dans un seul fichier BIGFILE ne semble pas être la meilleure solution en ce qui concerne les sauvegardes et restaurations.
Et pourquoi pas? Idée préconcue ou non-connaissances des nouvelles fonctionnalités?

Le blockrecover (10g) et le backup multisection (backup ... section size..., 11g) permettent restauration partielles et parallèles d'une partie d'un fichier.
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2011, 12h55   #7
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 926
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Finance

Informations forums :
Inscription : décembre 2005
Messages : 2 926
Points : 4 547
Points : 4 547
Il y a une différence fondamentale entre le bfile et le blob. Avec le bfile, tu ne passes pas de temps de chargement. Donc si tu charges 21 millions de doc en format bfile, tu en as pour quelques secondes. En format Blob, tu en as pour des jours. Après ça dépendra ce que tu veux en faire (les lire, les modifier, les indexer, etc)
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/10/2011, 23h41   #8
Nouveau Membre du Club
 
Inscription : mai 2004
Messages : 56
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 56
Points : 32
Points : 32
Dans l'application, aucune requête ne sollicite la colonne contenant le LOB si elle n'est pas nécessaire. Donc il n'y aura aucune lenteur sur cette partie.

Et lorsqu'une requête va lire ou mettre à jour le LOB, elle le fera que pour 1 seul enregistrement donc 1 seul LOB.
Avec ce fonctionnement, il ne devrait pas y avoir de ralentissement des traitements.
Zugg est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h54.


 
 
 
 
Partenaires

Hébergement Web