Developpez.com

Le Club des Développeurs et IT Pro

EdgeDB : un nouveau système de gestion de base de données relationnel-objet open source

Bientôt disponible en préversion technologique

Le 2018-04-17 03:22:26, par Ludovic Barry, Membre expert
EdgeDB est un nouveau système de gestion de base de données open source dont la première préversion technologique est prévue pour bientôt, d'après ses concepteurs. Ces derniers présentent EdgeDB comme « la base de données relationnelle objet de nouvelle génération ».

Rappelons que dans un système de base de données relationnel-objet (SGBDRO), l'information est représentée sous forme d'objets comme dans la programmation orientée objet. Un SGBDRO rend les objets de la base de données accessibles aux langages orientés-objet comme s'il s'agissait d'objets de ces langages. Il étend les capacités du langage de programmation de façon transparente au niveau de la persistance des données, du contrôle des actions concurrentes, de la récupération de données, des requêtes associatives, etc.

EdgeDB se veut toutefois différent de l'existant. Au lieu du modèle relationnel, il implémente un modèle graphe objet. Dans ce modèle, les données sont décrites et stockées sous la forme d'objets et de relations fortement typés ou de liens entre eux. Les objets et les liens peuvent contenir des propriétés : un ensemble de valeurs scalaires nommées.


D'après ses concepteurs, EdgeDB n'est ni une base de données orientée graphe, ni une base de données orientée document, ni une base de données orientée objet traditionnelle. Il dispose d'un langage de requête expressif, EdgeQL, dont l'objectif est de faire d'offrir et surpasser les capacités SQL modernes, telles que les sous-requêtes, l'agrégation avancée et les fonctions de fenêtrage. Entre autres fonctionnalités, il supporte le polymorphisme qui permet la composition des types, les types de données abstraites et les requêtes polymorphes. Il permet aussi la composition des schémas et l'introspection. Enfin, il prend en charge GraphQL qui est un langage de requête pour les API permettant d'exécuter des requêtes côté serveur. EdgeDB est également basé sur PostgreSQL et hérite de toutes ses forces : fiabilité, conformité ACID et performance.

L'exemple ci-dessous montre à quoi ressemble une simple requête dans EdgeQL. La requête retournera une liste de tous les utilisateurs avec le nom « Alice » avec tous les utilisateurs qu'elle suit :



Voici à quoi ressemble une requête SQL comparable :



Source : Blog EdgeDB

Et vous ?

Qu'en pensez-vous ?
  Discussion forum
9 commentaires
  • Shepard
    Membre expérimenté
    Je pense que l'idée est bonne, en tout cas pas mauvaise.

    J'ai toutefois quelques interrogations. Tout d'abord, "EdgeDB est également basé sur PostgreSQL et hérite de toutes ses forces". L'une des forces de PostgreSQL c'est son respect du standard SQL, qui fait qu'une requête développée pour MS SQL Server (par exemple) ne demandera que peu d'ajustements. La syntaxe PostgreSQL est-elle donc supportée en entier ? (Pour tous les tuples qui n'utilisent pas la fonctionnalité "objet", ça a du sens).

    Ensuite, on parle de relationnel-objet (pas de relationnel-structure). Selon Wikipedia, "un objet est un conteneur symbolique et autonome qui contient des informations et des mécanismes". On parle dans la news des informations, mais pas des mécanismes (autrement dit les méthodes). Je suis curieux de voir les possibilités à ce niveau, en admettant qu'il y en ait bien.

    Pour finir, ce modèle a-t-il été implémenté avec des use-case concrets à l'esprit ?

    Il faudra vraiment que je me renseigne en tout cas, si ce n'est pas encore prometteur selon moi, ça éveille au moins l'intérêt !

    Merci pour la news !
  • pachot
    Expert éminent
    Semble mieux pour naviguer user -> followee
    Mais une base relationnelle permet d’interroger les mêmes données en suivant différents axes de navigation. C’est la raison pour laquelle elles ont remplacé les bases hiérarchiques (ou équivalent, comme les bases relationnelles object qui semblaient être le futur il y a 20 ans).
  • abriotde
    Membre chevronné
    Même si
    Ca a l'air 100 fois mieux que du SQL
    ça a l'air inutile. Je me trompe peut-être mais je ne vois pas d'intérêt autre "qu'esthétique".
  • SQLpro
    Rédacteur
    La raison de la disparition des SGBD "Objet" est lié à l'impossibilité de trouver une méthode générique d'indexation. Inventé dans les années 80 ou le paradigme objet était à la mode, il y en a eut de nombreux : Versant, Gemstone, O², caché, ObjectStore... et j'en passe; On avait même inventé un nouveau langage d'interrogation : OQL.

    Tous ont disparus du fait de performances catastrophiques en lecture et donc de blocages sans nom du point de vu des mises à jour....

    Le sujet n'abordant aucune informations sur l'indexation, je serais curieux es performances et des aspects transactionnels !

    A +
  • Le gris
    Membre averti
    ça semble prometteur en tout cas! Wait and See!
  • bilbot
    Membre averti
    Il ne te reste plus qu'à faire un bench pour le démolir
  • xidoc
    Membre à l'essai
    EdgeDB est sorti en version stable 1.0 ce vendredi 11 février 2022.
    Est-ce que vous avez testé et pouvez donner votre avis. En particulier ceux qui doutaient.

    Est-ce que d'après la roadmap, cela semble intéressant ?
    https://www.edgedb.com/roadmap
  • Matthieu76
    Membre éclairé
    Je ne n'y connais pas trop mais ça à l'air quand même 100 fois mieux que le SQL.
  • Matthieu76
    Membre éclairé
    Envoyé par abriotde
    Je me trompe peut-être mais je ne vois pas d'intérêt autre "qu'esthétique".
    Dans l'un de mes projet en C++ je dois sauvegarder des objects contenant des listes de listes d'objets de différentes classes avec de l'héritage multiple et des variables static et tout le tralala et bin à sauvegarder en SQL c'est juste l'horreur !!! Du coup j'ai fini par sérialiser mes objets et les sauvegarder dans des fichiers textes. Dans ce cas, cette techno pourrait faire gagner beaucoup de temps.

    Mais sinon je vois pas trop la différence avec le NoSQL, ce n'est pas le but du NoSQL de sauvegarder des objets ? (je ne connais pas très bien ce langage)