Liens connexes

Dépêche modérée par

: Ça bouge du côté de SQLite !

Posté par bobert (). Modéré le 19 juin 2004.
0
La version 3.0 vient de sortir. Encore au stade alpha, elle apporte de nouvelles fonctionnalités, des performances accrues ainsi qu'une occupation disque réduite d'environ 30%... rien de moins !

SQLite est un moteur libre de base de données relationnelles aux possibilités fantastiques. Disons en deux mots qu'il a tout d'un grand, mais avec une empreinte mémoire de 125 ko... et en n'utilisant qu'un unique fichier de stockage !

Le recours à l'une de ses deux extensions client-serveur existantes permet d'utiliser SQLite au sein d'une application web. Mais là où SQLite se révèle imbattable, c'est embarqué au sein d'une application : on bénéficie ainsi de toute la puissance d'un moteur relationnel et du langage SQL, tout ça sans avoir déployé aucun serveur, puisque tout tient dans un unique fichier, tables, vues, index, etc...

Je profite donc de cette news pour encourager vivement tout développeur de logiciel libre à considérer sérieusement l'usage de SQLite dans son application : laisser à un moteur dédié le soin de stocker ses données, c'est pertinent pour toutes les applications, pas seulement pour le client-serveur. Et dans cette optique, SQLite est en passe de devenir incontournable...

NdM : SQLite est dans le domaine public.

> Lire la suite (140 commentaires, moyenne: 3,4).   [dépêche : 5692 caractères]

Nouveautés de la version 3.0

Voyons rapidement la liste des nouveautés apportées par cette version 3.0 :
- Un nouveau format de fichier de stockage -> 25 à 35 % plus compact
- Les données sont maintenant typées ; les types de données possibles sont: INTEGER, REAL, TEXT et BLOB
- Support de l'Unicode, via les encodages UTF-8 et UTF-16
- Support amélioré des accès concurrents : désormais, un processus peut commencer à écrire dans la base alors que d'autres processus continuent d'y lire

La liste complète des changements est dans les liens.

Les grandes caractéristiques de SQLite

Sans se substituer à la page du projet, je reprend ici les caractéristiques marquantes de SQLite :
- Implémente la plus grande partie de la norme SQL92, dont les triggers et les transactions
- Une base de données entière est stockée dans un seul fichier
- Supporte les transactions avec toutes les propriétés d'atomicité, de consistence, d'isolation et de durabilité (ACID)
- Peut gérer des bases de données d'une taille allant jusqu'à 2 téra octets
- Le code source n'a aucune dépendance externe ; il est portable vers de nombreuses plates-formes
- Offre des performances supérieures à PostgreSQL et même MySQL pour beaucoup de types de requêtes communes
- Des "wrappers" à la bibliothèque de SQLite ont été écrits dans une tonne de langages, vous êtes sûrs de pouvoir utiliser SQLite en codant dans le langage de votre choix
- Des polites sont également disponibles pour LIBDBI, JDBC, et ODBC

SQLite et accès concurrentiels

J'attire votre attention sur le fait qu'il est maintenant possible d'utiliser SQLite au sein d'un application web. Plusieurs personnes (voir par exemple ce journal ont eu des difficultés lors d'accès concurrentiels à SQLite). Deux extensions client-serveur sont maintenant disponibles :
- SQL Relay, utilisable avec plusieurs moteurs de base de données
- SQLite on Sockets, spécifique à SQLite, est un projet tout jeune, puisqu'il a été annoncé seulement avant-hier ! Le développeur principal rencontre semble-t-il quelques problèmes liés à pthreads, alors n'hésitez pas à lui filer un coup de main !

Domaines d'utilisation de SQLite

- Applications web, sites web
- Comme base de donnée embarquée dans un téléphone portable ou un PDA
- Comme base de donnée "embarquée" au sein d'une application

J'aimerais souligner la pertinence de l'emploi de SQLite comme couche logique de stockage des données d'une application... amis développeurs, ceci s'addresse à vous !
- vous y perdez peut-être en facilité de mise en oeuvre, du moins lorsque l'application en est à ses débuts
- mais considérez une seconde tout ce que vouz y gagnez :

1. La fiabilité.
La robustesse de SQLite n'est plus à prouver ; quand aux opérations d'écriture, elles offrent comme dit plus haut toutes les caractéristiques transactionnelles désirées.

2. Offrir à l'utilisateur un niveau illimité d'annuler/refaire

Les utilisateurs, moi le premier, sont habitués aux entrées de menu "Édition->annuler" et "Édition->refaire"... ça en est devenu tellement banal qu'on ne s'imagine pas la difficulté d'implémenter un bête undo/redo dans une application... vous avez déjà essayé, et vous avez renoncé, peut-être ?

Imaginez maintenant que vous ayez prévu des triggers dans votre base de données, qui enregistrent chaque action de votre utilisateur dans une table undo/redo temporaire... eh bien voilà, en utilisant SQLite, il n'en faudrait pas plus pour offrir cette possibilité !

3. Performances.
Sans rien faire, il y a des chances que SQLite soit plus rapide que vous pour accéder aux informations dont vous avez besoin. Mais supposons qu'une partie de votre application soit trop lente pour une fonctionnalité donnée. La puissance du modèle relationnel va vous permettre d'améliorer les performance de votre application sans aucun effort: d'une manière générale, il s'agit de récupérer des informations, de les traiter, et éventuellement de stocker le résultat. Eh bien, la plupart du temps:
- soit l'accès aux informations à traiter est trop lent : créez tout simplement un index supplémentaire adapté aux besoins
- soit le traitement de ces informations est trop lent : créez une ou plusieurs vues qui assurent un pré-traitement de l'information... c'est aussi simple que ça !

4. Donnez à votre application une architecture plus soignée.
En séparant la couche logique de stockage de vos données du reste, vous aurez un code beaucoup plus simple à maintenir et à étendre.

Vous ne connaissez pas SQL ? Commencez à vous y mettre, sincèrement pour des besoins simples les requêtes équivalentes sont triviales, et pour des besoins plus complexes vous trouverez sur le net des gens disposés à vous aider... ça ne doit surtout pas vous arrêter.

Vous n'aimez pas le relationnel ? Utilisez une couche de persistance (comme SQLObject en python) qui donne une représentation objet à vos données stockées via SQLite, et cessez d'utilisez ce prétexte, boudiou !


Voilà, en espérant vous avoir persuadé que SQLite est une aubaine pour les logiciels libres de toutes sortes. Richard Hipp, son principal auteur, nous offre là une petite merveille, dont il serait bien dommage de se priver.
Alors participez à la campagne de test de cette toute fraîche version 3.0, et mangez-en... à toutes les sauces !

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Pub

Posté par ftp (page perso, ) le 19/06/2004 à 15:28. (lien). Évalué à 19.

J'ai jamais ralé sur la partialité d'une news mais là...
Même les plus fanatiques de KDE/Gnome/Mandrake/SuSE/Emacs/Vim/Windows ne sortent pas des choses comme encourager vivement tout développeur de logiciel libre à considérer sérieusement l'usage de SQLite dans son application dans leur news...

-1 parce que trop raleur

revenons sur terre

Posté par Antoine () le 19/06/2004 à 15:49. (lien). Évalué à 20.

SQLite est un moteur libre de base de données relationnelles aux possibilités fantastiques. Disons en deux mots qu'il a tout d'un grand,

Bémol. La limitation fondamentale de SQLite est son modèle de verrouillage rudimentaire, même comparé à MySQL. En effet, toute requête en écriture et même toute transaction ouverte sur la base verrouille toute la base de façon exclusive.

« Multiple processes can have the same database open at the same time. Multiple processes can be doing a SELECT at the same time. But only one process can be making changes to the database at once.
[...]
Locking in SQLite is very course-grained. SQLite locks the entire database. »
http://sqlite.org/faq.html#q7(...)

Autre point notable :

« An attempt to execute COMMIT might result in an SQLITE_BUSY return code. This indicates that another thread or process had a read lock on the database that prevented the database from being updated. When COMMIT fails in this way, the transaction remains active and the COMMIT can be retried later after the reader has had a chance to clear. »
http://sqlite.org/lang.html#transaction(...)

explosion du trokilometre

Posté par Moun's (page perso, ) le 19/06/2004 à 15:53. (lien). Évalué à 4.

"La puissance du modèle relationnel va vous permettre d'améliorer les performance de votre application sans aucun effort"

"- soit l'accès aux informations à traiter est trop lent : créez tout simplement un index supplémentaire adapté aux besoins"

"- soit le traitement de ces informations est trop lent : créez une ou plusieurs vues qui assurent un pré-traitement de l'information... c'est aussi simple que ça !"

"Vous n'aimez pas le relationnel ? Utilisez une couche de persistance (comme SQLObject en python) qui donne une représentation objet à vos données stockées via SQLite, et cessez d'utilisez ce prétexte, boudiou !"


donc, si c'est si simple, peux tu :

- me faire une fermeture transitive sur un arbre de 10 000 noeuds puis sur un graphe ( non fortement connexe ) contenant des cycles du meme nombre de noeuds

- m'expliquer pourquoi les ecritures coutent plus et que c'est pire lors de transactions, et catastrophique en simultanées

- m'expliquer comment avoir une approche navigationnelle dans une archi relationnelle

- m'expliquer l'effondrement des bases à ecritures lourdes si elles ont trop d'indexation

- me dire le pourquoi de la multitude de tables pivot et autres tables d'etat



le relationnel n'est pas une panacée, et ces 5 questions expose certains points faibles theoriques et pratiques du modele.

A chaque probleme sa solution.

Firefox l'utilisera sans doute pour l'historique

Posté par Olivier Cahagne () le 19/06/2004 à 16:33. (lien). Évalué à 8.