IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Taille de la BDD


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut Taille de la BDD
    Bonjour à tout le monde,
    Voilà, je vous détaille mon problème avec une application Client/Server dont l'espoir de trouver une réponse rapide et efficace et je vous remercie d'avance:
    J'ai développé l'application avec Delphi 6 et Interbase 6 sous XP SP2 sur des machines d'un processeur 2 core duo, 4 IBTables dont l'une est de 50 colonnes et qui doit contenir plus de 4000 enregistrements.
    Pour l'instant tout marche bien sauf qu'en ajoutant plus d'enregistrements je me retrouve affronté à trois problèmes de lenteur d'exécution :
    1- il faut une 30' pour démarrer l'application : j'ai utilisé ib_Affinity -A1 au niveau du serveur mais ça n'a rien donné (si vous me proposez une mise à niveau à l'interbase 7.1 merci de m'indiquer les démarches car j'ai essayé mais je n'ai pas pu lancer l'application avec cette version).
    2- La taille de la BDD dépasse les 150Mo pour seulement 300 enregistrements (j'utilise une photo dans l'une des colonnes, pour compresser le champs BLOB comment faire?).
    3-J'utilise Twain pour la prise de photo à partir d'un scanner Epson mais après quelques prises la procédure devient de plus en plus lente jusqu'à un autre redémarrage de l'application.
    Je vous remercie pour votre coopération.

  2. #2
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Réponse à la question 2:
    Ne stocke pas d'image dans ta BDD, l'OS est fait pour ça, utilise le ! Il te suffit de stocker l'adresse de ton fichier image sur le disque. Et c'est beaucoup moins volumineux pour ton fichier de BDD.
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    +1 pour la réponse à la question 2

    pour la question 1 , ma réponse serait n'utilises pas les IBTables mais des IBQuery . Mais je rajouterais également passe à Firebird . Pour bien comprendre ce qui se passe considère la chose suivante : lorsque tu ouvre l'IBTable tu copies toutes les données de la table en mémoire (je simplifie ) .

    Quant au point 3 ? Twain est-il bien "libéré" après chaque scan ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci archonte et SergioMaster pour vos réponses et je vois qu'elles sont intéressantes seulement comme je suis novice en Interbase, pouvez-vous me détailler un peu vos procédures :
    - stockage d'images sur le disque
    - "Libération" de Twain après chaque scan

    Rq: j'ai installé Firebird mais je n'ai pas pu l'utiliser.

    et merci d'avance.

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    stockage d'image sur le disque veux simplement dire que au lieu de stocker l'image dans un blob , tu enregistres celle-ci dans un répertoire . Dans ta Base au lieu d'avoir un mémo contenant l'image , le memo ne contiendra que le chemin et nom de cette dernière .

    Libération de Twain , là c'est plus programmation , tout dépend de comment tu fais ton appel pour le scan , peut-être que un free manque quelque part.

    Rq: j'ai installé Firebird mais je n'ai pas pu l'utiliser.
    Très étonnant , l'utiliser pour ? la manipulation de la base via un GUI , l'utilisation des composants ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    voici le prog que j'ai utilisé pour Twain:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    procedure Tform1.DelphiTwain1TwainAcquire(Sender: TObject;
      const Index: Integer; Image: TBitmap; var Cancel: Boolean);
    begin
      DBImage1.Picture.Assign(Image);
      Cancel := TRUE;
     
    end;
     
    procedure Tform1.Button1Click(Sender: TObject);
    var
      SourceIndex: Integer;
      Source: TTwainSource;
    begin
     
      DelphiTwain1.LibraryLoaded := TRUE;
      DelphiTwain1.SourceManagerLoaded := TRUE;
      SourceIndex := DelphiTwain1.SelectSource();
      if (SourceIndex <> -1) then
      begin
         Source := DelphiTwain1.Source[SourceIndex];
         Source.Loaded := TRUE;
         Source.Enabled := TRUE;
      end {if (SourceIndex <> -1)}
     
    end;
    j'ai utilisé Source.Free mais ca donne violation d'acces.
    - Pour le Firebird je l'ai installé au poste Client et Server, mais je n'arrivais pas a connecter ma BDD via Firebird.
    - Je comprend ce que tu viens de dire sur le stockage mais comment le faire avec code??
    merci encore

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Je ne suis pas une pointure en TWAIN donc bien incapable de répondre
    DelphiTwain est un composant ?

    peut être , en fin de procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      DelphiTwain1.LibraryLoaded := FALSE;
      DelphiTwain1.SourceManagerLoaded := FALSE;
    pour ce qui est de l'autre question , là par contre voici un exemple (simplissime) où je prévisualise et enregistre le nom de l'image dans une table . Dans cette appli D3 le répertoire stockant les images est "fixe" ('C:\LALET\FICHIERS\ETIQUETTES') donc je n'enregistre que le nom du fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    unit ImageWin;
    
    interface
    
    uses Windows, Classes, Graphics, Forms, Controls,
      FileCtrl, StdCtrls, ExtCtrls, Buttons, Spin, ComCtrls, DBTables,
      JPEG;
    
    type
      TImageForm = class(TForm)
        DirectoryListBox1: TDirectoryListBox;
        DriveComboBox1: TDriveComboBox;
        FileEdit: TEdit;
        Panel1: TPanel;
        Image1: TImage;
        FileListBox1: TFileListBox;
        FilterComboBox1: TFilterComboBox;
        StretchCheck: TCheckBox;
        Label1: TLabel;
        Bt_Ok: TBitBtn;
        Bt_Annule: TBitBtn;
        procedure FileListBox1Click(Sender: TObject);
        procedure StretchCheckClick(Sender: TObject);
        procedure FileEditKeyPress(Sender: TObject; var Key: Char);
        procedure FormCreate(Sender: TObject);
        procedure Bt_OkClick(Sender: TObject);
        procedure Bt_AnnuleClick(Sender: TObject);
      private
        FormCaption: string;
      public
        Table : TTable;
      end;
    
    var
      ImageForm: TImageForm;
    
    implementation
    
    uses SysUtils;
    
    {$R *.DFM}
    
    procedure TImageForm.FileListBox1Click(Sender: TObject);
    var
      FileExt: string[4];
    begin
      FileExt := UpperCase(ExtractFileExt(FileListBox1.Filename));
      if (FileExt = '.BMP') or (FileExt = '.ICO') or (FileExt = '.WMF') or
        (FileExt = '.EMF') then
      begin
        Image1.Picture.LoadFromFile(FileListBox1.Filename);
        Caption := FormCaption + ExtractFilename(FileListBox1.Filename);
        if (FileExt = '.BMP') then
        begin
          Caption := Caption +
            Format(' (%d x %d)', [Image1.Picture.Width, Image1.Picture.Height]);
        end;
        if FileExt = '.ICO' then Icon := Image1.Picture.Icon;
      end;
    end;
    
    procedure TImageForm.StretchCheckClick(Sender: TObject);
    begin
      Image1.Stretch := StretchCheck.Checked;
    end;
    
    procedure TImageForm.FileEditKeyPress(Sender: TObject; var Key: Char);
    begin
      if Key = #13 then
      begin
        FileListBox1.ApplyFilePath(FileEdit.Text);
        Key := #0;
      end;
    end;
    
    procedure TImageForm.FormCreate(Sender: TObject);
    begin
      DirectoryListBox1.Directory:='C:\LALET\FICHIERS\ETIQUETTES';
      FormCaption := Caption + ' - ';
    end;
    
    procedure TImageForm.Bt_OkClick(Sender: TObject);
    begin
    Table.Edit;
    Table.FieldByName('IMAGE').Value:=FileEdit.Text;
    Table.Post
    Close;
    end;
    
    procedure TImageForm.Bt_AnnuleClick(Sender: TObject);
    begin
    Close;
    end;
    
    end.

    Dernier point , pour firebird
    le mieux serait de poster ta configuration (machines , mode d'installation etc.. ) sur le forum Firebird . Avais-tu désinstallé Interbase pour le test ?
    comment était ta chaine de connexion ? etc...
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  8. #8
    Fxg
    Fxg est déconnecté
    Membre éclairé
    Homme Profil pro
    ingénieur financier
    Inscrit en
    Septembre 2003
    Messages
    510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : ingénieur financier

    Informations forums :
    Inscription : Septembre 2003
    Messages : 510
    Points : 837
    Points
    837
    Par défaut
    Bonjour

    Est-il nécessaire de charger à chaque scan "the source library" ?

    Ces deux lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      DelphiTwain1.LibraryLoaded := TRUE;
      DelphiTwain1.SourceManagerLoaded := TRUE;
    à essayer de ne les appeler qu'une fois au début de ton programme pour charger la librairie en mémoire, comme évoqué par SergioMaster.

  9. #9
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Merci pour vos réponses,
    Fxg, ton idée est géniale, j'ai chargé "the source library" au démarrage du programme et ça a réduit énormément le temps d'attente. encore merci Fxg
    SergioMaster merci pour ton soutien, je vais voir en détail ton code source, par contre peux-tu me dire comment tu fais pour lier l'enregistrement avec la photo?
    Concernant Firebird, est ce qu'il faut créer la BDD avec Firebird ou peut-on utiliser une déjà créée avec Interbase? car j'ai déjà créée une avec interbase et j'ai fait plus de 455 enregistrements que je ne peux pas les refaire.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par checkrymo Voir le message
    Concernant Firebird, est ce qu'il faut créer la BDD avec Firebird ou peut-on utiliser une déjà créée avec Interbase? car j'ai déjà créée une avec interbase et j'ai fait plus de 455 enregistrements que je ne peux pas les refaire.
    backup de ta base de données avec interbase 6 et restore de backup avec ta nouvelle version de firebird

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par checkrymo Voir le message
    par contre peux-tu me dire comment tu fais pour lier l'enregistrement avec la photo?
    tu veux sans doute dire , comment l'afficher ensuite ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Image1.Picture.LoadFromFile(TModeleIMAGE.Value);
    où TmodeleImage est le est le chemin+nom de l'image
    ou encore , dans mon programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TModeleForm.DSModeleDataChange(Sender: TObject; Field: TField);
    begin
    if (Field=nil) OR (Field.FieldName='IMAGE') then
     try
       Image1.Picture.LoadFromFile(ServeurImage+'\'+TModeleIMAGE.Value);
       Image1.Visible:=True;
     except
       Image1.Visible:=False;
     end;
    end;

    Citation Envoyé par checkrymo Voir le message
    Concernant Firebird, est ce qu'il faut créer la BDD avec Firebird ou peut-on utiliser une déjà créée avec Interbase
    +1 VLDG , un backup (format transportable ) avec IB6 puis un restore sous FIB
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  12. #12
    Futur Membre du Club
    Inscrit en
    Octobre 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 18
    Points : 5
    Points
    5
    Par défaut
    Bonsoir,
    Premièrement je m'excuse pour ce retard.
    secundo, je peux dire que j'ai réglé deux points parmi trois de mon problème grâce à l'aide des membres de ce site.
    Je décris la solution dans l'espoir d'aider quelques uns qui ont ou auront le même problème.
    1- j'ai fait la mise à niveau à Interbase 7.1 (mode transportable, après backup avec IB6 puis restore avec IB 7.1), qui a résolu le problème d'hyperthreading posé par winXP. (J'ai évité Firebird car je n'ai pas travaillé avec et qui peut être aussi utile pour résoudre ce genre de problème).
    3- j'ai chargé "the source library" au démarrage du programme comme cité ci-dessus pour accélérer Twain pour plusieurs utilisations.
    Il reste le deuxième point qui est la taille de la BDD. Je suis convaincu qu'il faut séparer les photos de la BDD, mais je n'ai pas encore essayé par manque de temps.
    Je poste ce message comme résolu pour servir à d'autres internautes.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 735
    Points : 807
    Points
    807
    Par défaut
    Citation Envoyé par checkrymo Voir le message
    1- j'ai fait la mise à niveau à Interbase 7.1 (mode transportable, après backup avec IB6 puis restore avec IB 7.1), qui a résolu le problème d'hyperthreading posé par winXP. (J'ai évité Firebird car je n'ai pas travaillé avec et qui peut être aussi utile pour résoudre ce genre de problème).
    c'est possible aussi mais Interbase 7.1 a un coût supérieur à Firebird.

  14. #14
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 021
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 021
    Points : 40 935
    Points
    40 935
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par VLDG Voir le message
    c'est possible aussi mais Interbase 7.1 a un coût supérieur à Firebird.
    C'est le moins que l'on puisse dire
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Taille de la BDD
    Par mic79 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 05/08/2008, 20h08
  2. Influence taille de la BDD et temps des requetes
    Par jamesleouf dans le forum Modélisation
    Réponses: 4
    Dernier message: 13/05/2008, 16h10
  3. [MySQL] Récupérer la taille d'une BDD
    Par JoN28fr dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 18/04/2006, 12h58
  4. Réponses: 2
    Dernier message: 06/02/2006, 21h41
  5. Évaluation de la taille d'une bdd
    Par Jos dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 17/11/2005, 17h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo