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 :

SQLite Release 3.6.19 : Gestion des clés étrangères


Sujet :

SQLite

  1. #1
    Membre expert
    Avatar de Emmanuel Lecoester
    Profil pro
    Inscrit en
    Février 2003
    Messages
    1 493
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2003
    Messages : 1 493
    Points : 3 266
    Points
    3 266
    Par défaut SQLite Release 3.6.19 : Gestion des clés étrangères
    SQLite Release 3.6.19 On 2009 Oct 14 (3.6.19)

    Changes associated with this release include the following:

    * Added support for foreign key constraints. Foreign key constraints are disabled by default. Use the foreign_keys pragma to turn them on.
    * Generalized the IS and IS NOT operators to take arbitrary expressions on their right-hand side.
    * The TCL Interface has been enhanced to use the Non-Recursive Engine (NRE) interface to the TCL interpreter when linked against TCL 8.6 or later.
    * Fix a bug introduced in 3.6.18 that can lead to a segfault when an attempt is made to write on a read-only database.
    Que pensez-vous de cette nouveauté ?
    Va-t-elle permettre un nouveau regain d'intérêt pour cette base de données ?
    Emmanuel Lecoester
    => joomla addict.

  2. #2
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Voilà qui invalide mon affirmation d'hier...

    J'ai essayé il y a 1-2 ans d'insérer tout le contenu d'en-tête d'un newsgroup dans sqlite (uniqueID / Groupe / ArticleId / titre / auteur/ date). Les performance en ajout étaient impressionnantes jusqu'à 100'000 enregistrements (4-5000 insertions secondes). Par contre passé le million ça tombait dans les 200/sec.

    A ce que j'ai pu lire, cette lenteur viendrait des contraintes d'unicité qui sont des btree et non des hash index. Je me demande si ce problème est d'actualité.

  3. #3
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par Emmanuel Lecoester Voir le message
    SQLite Release 3.6.19 On 2009 Oct 14 (3.6.19)



    Que pensez-vous de cette nouveauté ?
    Va-t-elle permettre un nouveau regain d'intérêt pour cette base de données ?
    Absolument génial \o/.

    J'espère que ça sera vite implanté à peu près partout (sur les distribs linux en tout cas), comme ca ou pourra commencer à l'utiliser dans nos programmes, car la c'était tout à fait possible, mais il fallait passer par des générateurs de triggers, c'est un peu lourd quand on a une dixaine de tables ou plus ...
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  4. #4
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 65
    Points
    65
    Par défaut
    ça va vraiment accélérer les choses je pense. Mais j'attend de tester voir ce que ça donne par rapport à mon bien aimé SqlServeur

  5. #5
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par sidev Voir le message
    ça va vraiment accélérer les choses je pense. Mais j'attend de tester voir ce que ça donne par rapport à mon bien aimé SqlServeur
    C'est pas du tout la même utilisation, sqlite étant une BDD embarquée (ou alors il faut utiliser SQL Server CE, mais je sais pas où ca en est niveau fonctionnalités).
    SQLite est de plus en plus utilisée, beaucoup d'applis Linux l'utilisent, c'est la BDD intégrée à MacOS (et sa version mobile) et Android, ...
    Personnelement je l'utilise en C#, ce qui me permet de faire fonctionner mes applis aussi bien sur Linux/OS X avec Mono que sur Windows avec .NET
    Le fait qu'elle évolue bien devrait se ressentir sur les applications qui l'utilisent

    Edit:
    Il manque tout de même pour moi quelques petites choses à SQLite pour rendre son utilisation vraiment agréable:
    * Pouvoir mettre des sous-requêtes dans les contraintes ;
    * Les vues modifiables (on peut s'en passer avec des triggers INSTEAD OF) ;
    * Plus de fonctions intégrées: il n'y a presque pas de fonctions mathématiques (SQRT, SIN, ...) par exemple;
    * Un index FULLTEXT.

    Mais comme dit plus haut, l'objectif de SQLite n'est pas de gérer des grosses tables (> 200 000 enregistrements). En théorie, une application qui utilise SQLite ne devrait jamais arriver à cette limite, si c'est le cas, il faut passer son chemin. Par exemple, Banshee utilise SQLite pour gérer sa bibliothèque multimedia, et c'est vraiment efficace et rapide, comparé à ses concurrents, ...
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  6. #6
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Rapha222 Voir le message
    (ou alors il faut utiliser SQL Server CE, mais je sais pas où ca en est niveau fonctionnalités).
    ...
    Même si SQL Server CE et Sqlite joue dans la même catégorie il faut signaler que
    Sqlite est très simple (c'est ça qui fait sa force). SQL Server CE est plus complexe d'autant plus qu'il fournit des fonctionnalités bcp plus avancés.

  7. #7
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par sidev Voir le message
    Même si SQL Server CE et Sqlite joue dans la même catégorie il faut signaler que
    Sqlite est très simple (c'est ça qui fait sa force). SQL Server CE est plus complexe d'autant plus qu'il fournit des fonctionnalités bcp plus avancés.
    Je ne connais pas très bien SQL Server CE, car j'utilise principalement Mono.
    Tu saurais rapidement donner ce qu'il y a en moins dans la CE par rapport à la version serveur ou/et ce que CE supporte par rapport à SQLite (par example, support-il les requêtes récursives, comme la version serveur ?).

    Merci
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  8. #8
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 33
    Points : 65
    Points
    65
    Par défaut
    Citation Envoyé par Rapha222 Voir le message
    Je ne connais pas très bien SQL Server CE, car j'utilise principalement Mono.
    Tu saurais rapidement donner ce qu'il y a en moins dans la CE par rapport à la version serveur ou/et ce que CE supporte par rapport à SQLite (par example, support-il les requêtes récursives, comme la version serveur ?).

    Merci
    La récursivité non je pense pas. Mais il offre plus de fonctions math que Sqlite.
    On peut même faire de la réplication de données avec SqlServer 2000 et ultérieurs , ceci fait partie de ces nouvelles fonctionnalités.

  9. #9
    Membre éprouvé
    Inscrit en
    Avril 2006
    Messages
    853
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 853
    Points : 929
    Points
    929
    Par défaut
    Citation Envoyé par sidev Voir le message
    ça va vraiment accélérer les choses je pense. Mais j'attend de tester voir ce que ça donne par rapport à mon bien aimé SqlServeur
    lequel?

    mysql, oracle, db2?

  10. #10
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par robert_trudel Voir le message
    lequel?

    mysql, oracle, db2?
    Non, SQL Server, il l'a dit ^^'
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Rapha222 Voir le message
    Mais comme dit plus haut, l'objectif de SQLite n'est pas de gérer des grosses tables (> 200 000 enregistrements). En théorie, une application qui utilise SQLite ne devrait jamais arriver à cette limite, si c'est le cas, il faut passer son chemin. Par exemple, Banshee utilise SQLite pour gérer sa bibliothèque multimedia, et c'est vraiment efficace et rapide, comparé à ses concurrents, ...
    Je suis en désaccord avec ça : un SGBD qui ne peut pas tenir la charge serait à éviter absolument (tous les projets grossissent). Ce n'est pas le cas d'sqLite :
    Mon projet a commencé à 100 lignes, il approche aujourd'hui le million et j'espere bien qu'il ira jusq'à 50 M pourquoi n'irait-il pas ? contrairement à access il ne connait pas de chute brutale de perf mais je n'ai pas encore testé à pleine charge.

  12. #12
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par unBonGars Voir le message
    Je suis en désaccord avec ça : un SGBD qui ne peut pas tenir la charge serait à éviter absolument (tous les projets grossissent). Ce n'est pas le cas d'sqLite :
    Mon projet a commencé à 100 lignes, il approche aujourd'hui le million et j'espere bien qu'il ira jusq'à 50 M pourquoi n'irait-il pas ? contrairement à access il ne connait pas de chute brutale de perf mais je n'ai pas encore testé à pleine charge.
    Je répondais juste au commentaire de _skip. SQLite n'est pas fait pour gérer des quantités astronomiques de données, si c'est le cas, c'est qu'il faut passer à autre chose: un SGBD sur un machine dédiée.

    Comme c'est mis sur le site officiel:
    Citation Envoyé par http://www.sqlite.org/about.html
    Think of SQLite not as a replacement for Oracle but as a replacement for fopen()
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  13. #13
    Invité
    Invité(e)
    Par défaut
    selon les recommandations de l'éditeur :
    sqlite est conçu pour supporter des bases jusqu'à 2 puissance 41 bytes (tebibytes)
    mais il n'atteindra jamais ce nombre car aucun systeme ne peut supporter de
    fichier aussi gros. Il peut néammoins aller jusqu'aux limites du disque.
    Il est seulement conseillé de changer d'engine si les temps d'accès deviennent rédhibitoires et qu'on veut répliquer la base.

    Pour une appli standalone, les benchmarks restent excellents

    Si vous avez de bonnes infos de volumétrie, je suis hyper interressé !

    Quant au sujet de l'article, je me sers peu des contraintes sur foreign keys. Quelqu'un a-t-il des exemples concrets ? (je suis sous sqlite ado.net)

  14. #14
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par unBonGars Voir le message
    selon les recommandations de l'éditeur :
    sqlite est conçu pour supporter des bases jusqu'à 2 puissance 41 bytes (tebibytes)
    mais il n'atteindra jamais ce nombre car aucun systeme ne peut supporter de
    fichier aussi gros. Il peut néammoins aller jusqu'aux limites du disque.
    Il est seulement conseillé de changer d'engine si les temps d'accès deviennent rédhibitoires et qu'on veut répliquer la base.

    Pour une appli standalone, les benchmarks restent excellents

    Si vous avez de bonnes infos de volumétrie, je suis hyper interressé !

    Quant au sujet de l'article, je me sers peu des contraintes sur foreign keys. Quelqu'un a-t-il des exemples concrets ? (je suis sous sqlite ado.net)
    Je suis en train de créer un petit client P2P qui utilise SQLite.
    J'utilise SQLite pour stocker les informations sur les fichiers partagés: chaque fichier est divisé en parties de 4,2Mio.
    Sur un portable moyen (C2D 2,1 Ghz):
    - L'insertion des parties d'un gros fichier (~10 Gio, donc à peu près 2 500 parties/enregistrements) se fait instantanément ;
    - Les recherches avec 150 Gio de fichiers (donc un peu plus de 35 000 enregistrement), les recherches sont toujours très rapides, je ne saurais pas dire exactement comme ça, mais c'est instantané pour l'utilisateur.

    J'utilise SQLite avec ADO.NET en C#, sour Mono et .NET, mais je n'utilise pas de Dataset ou les fonctionnalités avancées d'ADO.NET, qui sont plus gourmantes.

    Pour les contraires de clé étrangères: http://www.sqlite.org/foreignkeys.html
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  15. #15
    Membre actif

    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 225
    Points
    225
    Par défaut
    Que pensez-vous de cette nouveauté ?
    Va-t-elle permettre un nouveau regain d'intérêt pour cette base de données ?
    C'est une très grosse avancée, très attendue... mais je ne l'utiliserai pas dans mon travail de tous les jours.


    Pour ma part, j'utilise tous les jours SQLite pour trier, tester et préparer des résultats issus d'un autre SGBD (Oracle).
    (ou pour mettre au point des scripts à destination ce SGBD)

    Par exemple, on me fourni des fichiers csv de plusieurs milliers, voir centaines de milliers de lignes... je dois rapidement fusionner les données, trouver des doublons ou des trous, formater des données et générer des tableaux sous Calc (équivalent de Excel).
    Créer un format d'import de csv ne me prend que deux minutes, le lire et générer une table de 100.000 lignes indexées... cinq secondes !

    Ensuite, les exports sont miraculeusement rapides. Les vues s'enchainent, puis les vues de vues... bref en moins de temps qu'il ne le faut pour l'écrire, une base complexe est créée et ... oubliée l'heure suivante.

    SQLite est un couteau suisse que j'emmène toujours sur ma clé USB . Aussi utile qu'une fourchette pour avaler des tonnes de données. Pas la peine d'avoir un moteur SGBD avec une installation de plusieurs heures (jours) lorsque le besoin est de lire quelques fichiers, les fusionner et en sortir un document exploitable.

    Prochaines avancées que j'attends de pied ferme : les fonctions mathématiques de base, les fonctions de traitement de caractères.

    Ex: select sign(-5);
    ou to_char(X'45') ou l'inverse de la fonction hex() ...

    a+

  16. #16
    Membre habitué Avatar de Rapha222
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 128
    Points : 168
    Points
    168
    Par défaut
    Citation Envoyé par bigane Voir le message
    C'est une très grosse avancée, très attendue.
    Prochaines avancées que j'attends de pied ferme : les fonctions mathématiques de base, les fonctions de traitement de caractères.

    Ex: select sign(-5);
    ou select to_char(X"45");

    a+
    +1
    Sauf qu'avoir des contraintes plus complètes, comme pouvoir faire des sous requêtes ou mettre des fonctions en place de constantes dans les DEFAULT (style DEFAULT STRFTIME()), ca me semble plus prioritaire, car c'est déjà "virtuellement" implanté, il reste juste à s'arranger pour que le moteur puisse prendre en compte ce type de syntaxe.

    Mais il y a clairement une carence dans les fonctions de base, je suis pas le seul a constater ça .
    Le problème, c'est que les créateurs veulent a tout prix que le binaire reste en dessous des 300Kio, et c'est vraiment dommage, car c'est a cause de ça que le nombre de fonctions est assez limité, alors que l'on peut les obtenir et qu'elles existent dans des libs supplémentaires officielles.

    C'est en tous cas étonnant et agréable de voir qu'une si petite lib peut être aussi puissantes \o/.
    Fedora 12 x64 (laptop) - OpenSuSe 11.2 (desktop)
    Hébergeur d'images et de fichiers (< 75Mio) gratuit et sans pub

  17. #17
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Citation Envoyé par Rapha222 Voir le message
    - L'insertion des parties d'un gros fichier (~10 Gio, donc à peu près 2 500 parties/enregistrements) se fait instantanément ;
    Vrai, mais ça se dégrade très fortement si les volumes deviennent importants. En même temps c'est pas fait pour on dira.

  18. #18
    Membre actif

    Inscrit en
    Décembre 2004
    Messages
    169
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 169
    Points : 225
    Points
    225
    Par défaut
    Au fait, je ressorts un extrait d'un Interview de D. Richard Hipp (auteur de SQLite) :

    Les fonctionnalités qui pourraient apparaître dans les prochaines versions sont la recherche full-text, et la possibilité de réaliser des lectures et écritures incrémentales sur les BLOBs.
    Miam !

    Mise en oeuvre :
    http://www.sqlite.org/cvstrac/wiki?p=FtsUsage

    Exemples :
    http://tuxce.selfip.org/informatique...ichiers-textes
    http://blog.bjornoya.be/lab_stacks/2...-integral.html

    Article de presse:
    gnulinuxmag mai 2009


    a+

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 92
    Points : 156
    Points
    156
    Par défaut excellente nouvelle
    Merci pour l'info
    j'étais en train de faire mon mcd pour une base sqlite destinée à une extension firefox et je pestais d'avance de tous les triggers que j'allais devoir écrire pour garder l'intégrité/contraintes des données ...
    par contre, j'ai observé que la dernière dll inclue à FF 3.5.4 embarqué la version 3.6.16.0 de sqlite.
    j'ai téléchargé le fichier sqlitedll-3_6_19.zip pour inclure à Firefox, me reste plus qu'a tester. Heu, j'avoue, je bidouille plus que je développe ...
    A+

  20. #20
    Invité
    Invité(e)
    Par défaut
    Désolé je me sers rarement des fonctions en cascade, les foreign keys se limitent à la gestion de l'index pour moi, je fais les checks d'intégrité depuis l'appli.
    Concernant la volumétrie, je suis arrivé à 50 millions sans trop de problèmes.

    Quand Richard Hipp dit que sqlite est plus dans la lignée fopen() que oracle, il veut dire que ce n'est pas une sgbd pour faire du client-serveur mais plutot pour régler une fois pour toutes la question des fichiers de données ou "document" d'une application standard (fichier/Ouvrir | Enregistrer ..)

    C'est là que SQLite est génial. Si vous voulez faire du client serveur ou multiuser, ou réplication ou ..., vous serez plus heureux avec un autre sgbd.

Discussions similaires

  1. Gestion des clés étrangères
    Par VinceCBA dans le forum Hibernate
    Réponses: 19
    Dernier message: 13/10/2011, 13h30
  2. Réponses: 3
    Dernier message: 29/06/2008, 18h56
  3. [EJBQL] [EJB3] Gestion des clés etrangères
    Par niouma dans le forum Java EE
    Réponses: 1
    Dernier message: 20/06/2008, 09h47
  4. [MySQL] Insertions et gestion des clés étrangères
    Par b_e_n_n dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 15/06/2008, 16h14
  5. Gestion des clés étrangères
    Par Gonelle dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 06/07/2006, 10h48

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