I am actually working (quite a lot actually) on a system makeover for one of my clients. In a nutshell, it's an on-line (some would call it "cloud") system for their clients to administrate their business. The main issue with this system is the complexity of the process (a lot of the data are generated not just "proccessed") and the traffic. In this configurtion, what is the bottle neck ? The DBMS, and nobody will object.
Since the main reason behind this makeover is because of the intensive usage of the DBMS, the system was slow as hell. I know sql optimization etc... i am not a n00b, but think about this: Event if your sql statement is over-boosted etc... a sql that return 5000 records is still and sql that return 5000 records. That mean, there still 5000 records that the system have to processed, display etc. and i am not talking about the memory space used to store those 5000 records.
So, i had to think a solution that use as less as possible the db. And i was able to redesign a system by reducing the number of db connection by 90% (maybe more i need to find a way to properly calculate it) and without any lost in term of functionlity and a definitly huge gain in speed and server load.
I then look at my documentation and ask myself: Why using a db for an applicative usage ? i don't put in line the need of a db, i clearly understand the benefit of it for reporting, analysis and other "off-line" operations.
It was possible by using what i call SOCS (Smart Object Caching System) and don't use db at all. Basically SOCS is like ORM, the difference is that instead of using the object as a bridge between the db and the application, the object IS the data and decide whether informations should be read from the db or written in the db. I will write an article later about it when the concept will be "clear enough" in my mind.
When i said "don't use db at all", i really meant it. For example content/file association. the best practice actually is the following flow:
Let's illustrated this statement why the example of articles.
Most of the time, articles (blog tocket, articles etc...) are associated with pictures, pdf files etc... I won't discuss the silly practice you can find in every cms that store the text contents in db instead of a static html version. Anyway, in a decently structured system, every article have a unique id. So now ask yourself, why should you trigger the db to get the path to the images etc... when you can use the god speedly computer file system ? Why storing the file description in a db when you can use it as a file name ? Problem with space or special caracters ? You should maybe have a look at url encoding, base64 encoding etc... (i personanaly like url encoding).
isn't :
Faster than:
I would simply conclude why the title: Do we still need DBMS in web systems ?
Français:
Ces dernier temps je travaillais (et pas qu'un peu) sur la refonte d'un système d'un de mes clients. En gros, il s'agit d'un système de gestion en ligne pour aider leurs clients à gérer leur business. Le gros problème avec ce système est que la plupart des informations sont générées et non pas traitées en plus d'un trafic relativement élever. Dans ce cas de figure, quel est le point de rupture ? Le SGBD et personne ne me contredira.
Comme la raison principale de cette refonte et du au fait que le précédant système utilisé de manière intensive la SGBD ce qui a eu pour conséquence que le système était devenu lent à en mourir. Bien sur je connais les optimisation de sql et ces conneries, mais une sql super optimisée qui retourne 5000 enregistrements, reste une sql qui retourne 5000 enregistrements. 5000 enregistrements qui doivent être traités, affichés etc... Et je ne parle pas de l'espace mémoire.
Je me suis alors retrouvé penser un système qui solicite le moins possible la bd. Et le pire c'est que j'ai réussit à designer un système où le nombre de connection à la bd a été réduit de 90% par rapport à la précédente version (peut-être plus, mais faut que je trouve le moyen de calculer ça), le tout sans perte fonctionnel et avec un grand gain en terme de vitesse et de charge serveur.
Je me suis alors demandé: Pourquoi utiliser un bd à usage applicatif ? je ne remet pas en cause l'intérêt d'une base de données, je comprend très clairement leurs bénéfices dans les domaines du reporting, de l'analyse et autre traitement hors-ligne.
Ceci fut possible grace a ce que j'appelle SOCS (SMART OBJECT CACHING SYSTEM, en français Système de Cache Objet Intelligent) et pas utiliser la base de données du tout. SOCS c'est un peut comme ORM, à l'exception faite que dans ORM l'objet est un pont entre la base de données et l'application alors que dans SOCS les données sont stockées dans l'objet qui décide s'il faut lire l'information depuis la base ou écrire dans la base ou rien faire :P J'écrirais un article à ce sujet quand le concept sera "suffisamment clair" dans mon esprit.
Quand je disais, "pas utiliser la base de données du tout", je déconnais pas. Prenons l'exemple de l'association contenue/fichier associés. La "best practice" et de faire:
L'utilisateur accède au contenue -> on connecte à la base de données pour récupérer les fichiers associés -> on les incorpores dans le document
Vous pensez pas qu'il ai un problème là ? On m'a toujours dis que le chemin le plus court et le plus rapide entre deux points était un ligne droite (je sais il n'y a pas longtemps j'ai remis en cause le concept de ligne droite mais bon).
Discutons alors du au combien récurent exemple de l'article.
Un article (un ticket de blog, une page informative etc..) est le plus souvent associé avec des fichiers: images, pdf etc...Je ne discuterais pas la stupide pratique qu'on retrouve dans tout les cms qui consiste à stocker les article dans la base de données au lieu d'un fichier html statique. Toujours est-il, dans un système qui à une structure décente, chaque article à un identifiant unique. Posez-vous la question suivante: Pourquoi connecter la base de donnée pour obtenir la localisation d'une image etc. quand on peut utilise le système "speedy gonzales" fichier de la machine ? Pourquoi stocker la description d'un fichier dans la base de données quand on peut utiliser le nom du fichier ? Le problème des espaces et des accents ? Connaissez-vous l'encodage en url ou l'encodage en base 64 etc..? (perso j'ai un faible pour l'encodage en url)
N'est-il pas plus rapide de faire:
plutôt que :
Je conclurai avec le titre de cet article: A-t'on encore besoin des SGBD dans les systèmes orientés web ?