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

SQLite Discussion :

Taille de la base SQLITE


Sujet :

SQLite

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut Taille de la base SQLITE
    Bonjour à tous,

    J'ai besoin d'aide dans la compréhension du fonctionnement de SQLITE.

    Je stock les valeurs contenues dans des fichiers cvs dans une base SQLite la somme des fichiers csv fait 125 Mb tandis que la taille de la base fait 235 Mb, je n'ai pas d'index dans la base.

    Pourquoi un tel écart ?



    Merci

  2. #2
    Membre éprouvé
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 420
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Il faudrait voir comment est constitué ton fichier mais quelques pistes:

    * Une colonne vide prendra plus de place (au moins un octet)
    * Si tu n'as pas de clé primaire auto incrémentée SQLITE crée une colonne "rowid"
    * L'encodage des textes (Ansi pour UTF)

    Mais je trouve quand même le rapport important. Sur une de mes bases avec un index, je passe de 264 Mo à 330 Mo (soit +25% avec un index) alors que tu en es à 88%

    As tu réorganisé ta base (commande Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Merci pour ces pistes acaume.

    J'ai effectivement fait un VACUM

    Quelques précisions sur le contenu de la base. Il y a 5 tables
    * table 1 : 98 champs, pas de clefs primaire, 147254 enregistrements
    * table 2 : 98 champs, 117970 enregistrements
    * table 3 : 15 champs, 1 clef primaire, 19 champs
    * table 4 : 7 champs, 1 clef primaire, 17 enregistrements
    * table 5 : 32 champs, pas de clef primaire, 26121 enregistrements


    le rapport entre la somme des fichiers csv que j'injecte dans la base et la taille de la base me semble disproportionné (proche de x2), mais c'est peut-être normal ?

  4. #4
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Citation Envoyé par jouclar Voir le message
    * table 1 : 98 champs, pas de clefs primaire, 147254 enregistrements
    * table 2 : 98 champs, 117970 enregistrements
    Moi je chercherais de ce coté, surtout si la totalité des 98 champs de chaque table n'est pas remplie. Et quoiqu'il en soit, 98 champs dans une table ce n'est pas une bonne idée, il y a probablement moyen de séparer ces tables en plusieurs plus petites.

    A ce sujet tu peux voir cet article : http://blog.developpez.com/sqlpro/p1...mances_petites

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par ed73170 Voir le message
    Moi je chercherais de ce coté, surtout si la totalité des 98 champs de chaque table n'est pas remplie. Et quoiqu'il en soit, 98 champs dans une table ce n'est pas une bonne idée, il y a probablement moyen de séparer ces tables en plusieurs plus petites.
    Je ne vois pas pourquoi. Et petite précision avec SQL on parle plutôt de colonnes que de champs.

    Perso, bien que je ne maitrise pas SQLite, je pense plutôt à des transactions mal fermées
    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
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    Bonjour SegioMaster

    Merci pour cette piste mais comment est-il possible de vérifier si une transaction est bien ou mal fermée ?

    J'utilise un code en Python pour peupler la base, exemple ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    with open(data_file, 'rt') as csvFile: #  
         csvReader = csv.DictReader(csvFile, delimiter=';')
         with sqlite3.connect(db_filename) as conn:
                cursor = conn.cursor()
                cursor.executemany(sql, csvReader)
         cursor.close()
         conn.close()
    que j'ai adapté à partir de https://pymotw.com/2/sqlite3/

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    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 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par jouclar Voir le message
    Merci pour cette piste mais comment est-il possible de vérifier si une transaction est bien ou mal fermée ?
    ne connaissant pas ce serpent sauf de nom je serai bien en peine dire ce qui se passe au niveau de l'instruction cursor.executemany(sql, csvReader)pour ce qui est de SQlite même chose, je n'utilise que très peu (uniquement pour des tables de travail pour l'instant, donc volatiles)
    je pense qu'avec SQLite il doit y avoir un moyen de vérifier, ou à tout le moins de 'réconcilier' toutes les transactions à moins qu'il s'agisse de ce que fait VACUMM ?
    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
    Expert confirmé Avatar de ed73170
    Homme Profil pro
    Développeur indépendant
    Inscrit en
    Mai 2009
    Messages
    765
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur indépendant

    Informations forums :
    Inscription : Mai 2009
    Messages : 765
    Points : 5 522
    Points
    5 522
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Perso, bien que je ne maitrise pas SQLite, je pense plutôt à des transactions mal fermées
    Avec SQLite les transactions sont implicites, c'est à dire que toute commande SQL autre que SELECT ouvre une transaction et la ferme une fois la requête entièrement exécutée car aucune modification de la base ne peut-être réalisée en dehors d'une transaction (voir la documentation SQLite https://www.sqlite.org/lang_transaction.html). Il ne peut donc pas y avoir de transaction mal fermée si on utilise ce mode.

    Il est bien sûr possible d'utiliser des transactions manuelles avec BEGIN et END (ou COMMIT), mais vu le code posté par jouclar, cela ne semble pas être le cas.

  9. #9
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 237
    Points : 99
    Points
    99
    Par défaut
    J'ai avancé sur mon problème.

    Sur chacune les deux plus grosses tables de la db initiale, j'ai supprimé la colonne id puis nettoyer la base via un VACUM et ma base passe de 246Mo à 84Mo génial sauf que je ne sais pas pourquoi ??

Discussions similaires

  1. Comment calculer la taille d'une base de données ?
    Par say dans le forum Décisions SGBD
    Réponses: 8
    Dernier message: 01/04/2011, 16h48
  2. taille de la base de donnée
    Par mic79 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 17/11/2004, 13h18
  3. pbl de taille de la base
    Par calafato dans le forum Access
    Réponses: 3
    Dernier message: 29/10/2004, 11h16
  4. Augmentation de la taille de la base
    Par jfphan dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 24/02/2004, 10h54
  5. [SQL SERVEUR]taille d'une base de donnée
    Par hirochirak dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 08/01/2004, 12h07

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