Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Framework/BDD] FuelDB

Base de donnée temps-réel

    1 octobre 2014 à 15:06:03

    Je m’appelle Joris Basiglio, j’ai 23 ans et je suis actuellement développeur Java/J2EE pour une entreprise américaine éditrice d’ERP. Je suis un actif sur les forum Java et Javascript de OC et essaie de trouver un peu de temps pour débattre et venir en aide aux personnes voulant apprendre ces technologies. Je suis très intéressé dans les nouvelles technologies du web et plus précisément dans celles dite “temps réel” 

    Si je poste dans ce forum c’est pour vous présenter un de mes projets: FuelDB

    Logo de FuelDB

    Genèse

    Ayant précédemment travaillé pour une entreprise réalisant des systèmes de supervision pour le traffic routier/autoroutier et les tunnels. J’ai eu l’occasion d’utiliser des outils propriétaire de l’informatique industriel pour réaliser mon travail. Je trouvais les approches de ces outils très innovantes mais aussi trop fermé (Point de vue open-source) et n’exploitant qu’une infime partie de leur potentiel. En particulier, les bases de données temps-réel utilisant les normes OPC. C’est à ce moment là que je me suis dit que je pourrais réaliser une base de donnée temps-réel extrêmement simpliste et offrant de multiples connecteurs.

    Généralités et avancement

    FuelDB est une base de données temps-réel a mémoire volatile qui permet de créer un vecteur central de communication au sein de n’importe quel écosystème informatique.

    Le coeur de son utilisation réside dans le mécanisme d’abonnement qu’elle propose. En effet, n’importe quel client peut choisir de s’abonner à une variable et de ce fait, il sera notifié de tous ses changement jusqu’à désabonnement ou déconnexion.

    Structure

    La base de donnée est structuré en point de donnée hiérarchique (à l’image d’un système de fichier).
    L’adresse d’un point est donnée par une suite de caractère alphanumérique séparé par le caractère point (“.”)

    Exemple:

    Si l’on souhaite stocker les informations d’une voiture:
    on peut écrire sa latitude dans ce point: FLEET.CAR1.LAT
    ou encore pour enregistrer sa vitesse: FLEET.CAR1.SPEED
    ou bien même la température du moteur FLEET.CAR1.ENGINE.HEAT
    pour la voiture numéro 2 vous l’aurez compris, c’est le même principe FLEET.CAR2.LAT, …

    Dans notre cas, les fils du point FLEET.CAR1 seront LAT, SPEED et ENGINE

    Les données sont stockées en JSON.

    Il n’ya aucune contrainte dans l’organisation des données c’est à vous de faire le choix le plus judicieux pour votre application.

    Persistence

    Le but de cette base de donnée est de contenir et de mettre à disposition très rapidement des données de nature volatile et sujets à de très fréquent changement. De ce fait, les données ne sont pas persisté sur le disque mais uniquement disponible en mémoire vive.
    Les données de cette base sont horodaté à la miliseconde.

    Sécurité

    FuelDB permet de sécurisé toutes ses connexions avec ses clients grace à la couche SSL qui est géré nativement. Au delà de ca, un mécanisme d’authentification est aussi proposé.

    Connecteur

    La base de donnée propose actuellement 3 connecteurs pour pouvoir accéder aux donnée:

    • API RESTful (Permettant la lecture et l’écriture)
    • Websocket (Pour les clients en navigateur JS)
    • Socket (Pour les clients lourd et/ou applications tierces)

    API

    Actuellement 2 API ont été développé pour pouvoir utiliser FuelDB.

    • Un client Javascript embarqué dans la base de donnée utilisant les websockets.
    • Un client Java utilisant les Sockets et/ou Websockets en cours de finition.

    Technologie

    FuelDB utilise NodeJS (Google JS Engine V8) qui est environnement très adapté pour la programmation événementiel. Il permet de simplifier au maximum la programmation et rendre le code source éditable très simplement. FuelDB ne pese que 18KB au téléchargement et moins de 1MB après installation de ses dépendances.

    Performance

    Des tests de performance ont été réalisé sur un Raspberry Pi, le serveur arrivait a gérer 450 IOPS avant d’atteindre 100% d’utilisation CPU.
    Les messages envoyés pesaient quelques octets et étaient répartie sur 5 clients.

    Documentation

    Le serveur est très simple d’utilisation (Téléchargement/Installation/Démarrage en quelques lignes de commande) néanmoins, une page d’explication est disponible sur le site.
    Une doc pour l’API Javascript est aussi disponible sur le site web.
    La javadoc pour l’API Java sera bientôt uploader sur maven central.
    Une suite de tutoriel sous forme de JSFiddle sont disponible pour pouvoir tester en live, modifier le code source avec sa propre base FuelDB ou avec une de test disponible sur internet.

    Outils

    Chaque instance du serveur propose des outils au travers d’applications web simplistes.

    Actuellement se trouve:

    • Un moniteur de la base de donnée (Charge/Connection etc…) 
    • Une application de test de charge 
    • Un constructeur de requête pour l’API RESTful

    License

    La base de donnée est open-source et disponible sous License MIT

    Objectifs

    Les objectifs sont:

    • Compléter et finaliser les documentations Server et APIs
    • Finaliser la gestion du clustering de base de donnée avec LoadBalancer et Broker pour augmenter significativement le nombre de connexion maximum.
    • Gérer les permissions avec utilisateur et groupe (restriction des points de donnée en lecture etc…)
    • Créer un API en C/C++
    • Créer un API orienté Objet en JAVA / Javascript
    • Effectuer d’autre tests de performance

    Le projet et son originalité

    Ce produit est donc destiné à des développeurs souhaitant ajouter une très forte dose de dynamisme dans leurs créations. Son domaine d’application est très large:

    • Jeux en ligne multijoueur par navigateur
    • Supervision en tout genre et notament la domotique 
    • Serveur de localisation (Geoserveur)
    • Chat

    De manière général, tout ce qui est lié de près ou de loin au temps-réel

    Le projet est original dans le sens ou il n’existe (dites moi si je me trompe) aucune solution open-source et gratuite sur le web. Un des projets qui s’en rapproche peut-être le plus est FireBase. Mais il n’a rien de gratuit et d’open source et propose un fonctionnement assez différent… 

    Liens & Informations

    Site web: Wonderfuel - FuelDB
    Sources: SVN
    Binaires: Latest
    Contact: joris.basiglio@wonderfuel.io

    -
    Edité par unnamed38 15 octobre 2014 à 19:43:53

    • Partager sur Facebook
    • Partager sur Twitter
    FuelDB => Base de donnée web temps réel avec websocket(Presentation)
      7 octobre 2014 à 13:15:23

      Je up pour dire que je cherche des programmeurs/testeurs pouvant me donner un feedback.

      -
      Edité par unnamed38 7 octobre 2014 à 13:15:37

      • Partager sur Facebook
      • Partager sur Twitter
      FuelDB => Base de donnée web temps réel avec websocket(Presentation)
      Anonyme
        8 octobre 2014 à 9:25:01

        Un beau projet qui à de l'avenir, bonne continuation
        • Partager sur Facebook
        • Partager sur Twitter
          9 octobre 2014 à 11:25:28

          Merci, J'espere surtout que ca pourra donner de nouvelles idees aux developpeurs en recherche d'innovation.
          • Partager sur Facebook
          • Partager sur Twitter
          FuelDB => Base de donnée web temps réel avec websocket(Presentation)
            15 octobre 2014 à 20:08:28

            Le client Java a été mis a jour avec une documentation complete.

            Les premiere sources pour l'API C/C++ ont été mis a disposition sur le SVN.

            Je recherche toujours des personnes pour un feedback

            • Partager sur Facebook
            • Partager sur Twitter
            FuelDB => Base de donnée web temps réel avec websocket(Presentation)
              7 novembre 2014 à 12:21:22

              Bonjour,

              Très intéressant!

              Est-ce qu'on peut utiliser ton SGBD pour des données sensible?

              Que se passe-t-il si la machine plante?

              -
              Edité par max-om-93 7 novembre 2014 à 12:21:47

              • Partager sur Facebook
              • Partager sur Twitter
                7 novembre 2014 à 12:57:59

                Pour le moment, les donnees sont disponible uniquement en memoire vive (Priorite performance) donc si plantage, plus de donnee... J'ai pour projet (Quand j'aurais un peu de temps) de developper un module d'archivage (MongoDB sans doute) qui permeterais de retrouver les dernieres valeurs des points lors d'un plantage et surtout mettre en place un mecanisme de rejeux des donnees. Ce serait tres pratique dans la supervision, si par exemple on souhaite rejouer les informations d'une periode anterieur.

                -
                Edité par unnamed38 7 novembre 2014 à 13:00:08

                • Partager sur Facebook
                • Partager sur Twitter
                FuelDB => Base de donnée web temps réel avec websocket(Presentation)

                [Framework/BDD] FuelDB

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown