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

Persistance des données Java Discussion :

Stockage de données HSQLDB hors ligne et synchronisation avec BDD principale


Sujet :

Persistance des données Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 29
    Points : 21
    Points
    21
    Par défaut Stockage de données HSQLDB hors ligne et synchronisation avec BDD principale
    Bonjour,
    ma problématique est la suivante :
    j'ai une application java qui s'installe sur un pc qui fonctionne connecté à une base de donnée mysql.
    Je dois pouvoir la faire fonctionner sur des zones non couverte par le wifi.
    l'idée est la suivante :
    1/ passer en mode hors connexion volontairement : copie des données nécessaire de la base principale à une base temporaire.
    2/faire les enregistrements localement dans la base temporaire.
    3/ lorsqu'on récupère le wifi synchroniser les données avec la base mysql principale.
    j'ai vu la base embarqué HSQLDB j'ai pensé stocker les données temporaire dedans mais je me demande si c'est une bonne solution d'une part et d'autre part si il n'y en a pas une meilleurs.
    par ailleurs je me demande si on peut faire des requetes du type insert into (....) (select * ....)
    ou le select attaquerait la base temporaire et le insert into la base réelle : je ne penses pas que ce soit possible mais bon au cas ou je demande
    Je fais donc appel à vos lumière, certains d'entre vous ont il déjà fait ce genre de choses, je suis preneur de tout retour d’expérience et surtout de la meilleurs méthodologie à suivre.
    Merci

  2. #2
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 29
    Points : 21
    Points
    21
    Par défaut réalimentation par fichier texte de transaction
    Bonjour,
    je vous mets la suite de ma réflexion :

    je pensais :
    1/intégrer les donnée nécessaire au fonctionnement de l'application hors ligne dans hsqlbd dans des tables temporaires.
    2/enregistrer les update inset into etc... dans la base temporaire et surtout garder la trace de chacune des transaction dans un ficier texte.
    3/exeecuter sur la base réelle le contenu du fichier texte ligne a ligne dans le meme ordre insert delete update etc...

    Après quelques heures de prise de tête ça me parait la meilleurs solution pour réalimenter la base réelle sans créer de conflit si d'autres utilisateurs font de même en même temps qu'en pensez vous ?bonne méthode ? une meilleur idée? je suis preneur de toute réflexion sur le sujet

    Merci

  3. #3
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Bonjour,

    La synchronisation des données saisies hors connexion avec le serveur (en ligne) est assez delicate, ce d'autant plus que pendant le fonctionnement ton application en mode non connecté, les données du serveur principal peuvent aussi être mises à jour. Je n'ai pas encore eu cette problématique mais j'aurais tendance à te proposer de mettre en place un batch de synchronisation, qui fonctionnera dans les 2 sens :
    1- Dans le sens de Mysql vers Hsqld, c'est une simple écrasement/remplacement de données
    2- Dans le sens HsqlDb vers Mysql, il faudra retrouver les enregistrements en I/U/D ayant bougé sur HsqlDB (voire de ton fichier temporaire de transaction), pour les "I/D" aucun souci, les insérer/supprimer dans mysql, mais pour les U, c'est là la situation tordue qui consistera à merger les lignes.
    Je suis désolé de ne pas avoir de solution automatique pour ton traitement, mais je reste également ouvert à une autre solution.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 29
    Points : 21
    Points
    21
    Par défaut merci
    Merci,
    au final dans la partie de mon application que je veux synchroniser pour le moment il n'y aurait que des insert et des delete.
    du coup je vais tester je verrais bien ce que ça donne en réel
    1/ creation des données de hsql issue de mysql
    2/travail dans l'appli en me basant sur hsql et en générant un fichier de transaction.
    3/import des données en exécutant le script généré avec un contrôle sur les insert de non existence des lignes pour éviter les doublons si quelqu'un a fait la même saisie pendant qu'on ait hors connecté.
    Je penses que ça devrait être pas mal à tester pour voir les temps d’exécutions.
    je penses qu'il n'y a probablement pas d'autres solutions mais au cas ou je laisse le post ouvert encore un peu.
    Merci




    Citation Envoyé par DevServlet Voir le message
    Bonjour,

    La synchronisation des données saisies hors connexion avec le serveur (en ligne) est assez delicate, ce d'autant plus que pendant le fonctionnement ton application en mode non connecté, les données du serveur principal peuvent aussi être mises à jour. Je n'ai pas encore eu cette problématique mais j'aurais tendance à te proposer de mettre en place un batch de synchronisation, qui fonctionnera dans les 2 sens :
    1- Dans le sens de Mysql vers Hsqld, c'est une simple écrasement/remplacement de données
    2- Dans le sens HsqlDb vers Mysql, il faudra retrouver les enregistrements en I/U/D ayant bougé sur HsqlDB (voire de ton fichier temporaire de transaction), pour les "I/D" aucun souci, les insérer/supprimer dans mysql, mais pour les U, c'est là la situation tordue qui consistera à merger les lignes.
    Je suis désolé de ne pas avoir de solution automatique pour ton traitement, mais je reste également ouvert à une autre solution.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 29
    Points : 21
    Points
    21
    Par défaut autre vision des choses avec mariadb embededd
    Bonjour,
    j'ai commencé à faire des tests import de table de mysql vers hsqlbd et là...
    ça fonctionne mais c'est titanesque à mettre en place et surtout ça sera impossible à maintenir par la suite.(plein de vue et le nombre de table à créer et trop important pour que ça soit une bonne solution)
    Du coup plan B.
    Je me dis que le mieux serait d'importer toute la base du serveur vers le poste local.
    la base sur le serveur est mariadb j'ai vu en lignes quelques infos sur une version de mariadb qui pourrait être installé nativement dans l'application mais rien de bien clair :
    Est ce que quelqu'un aurait des infos à ce sujet?
    Est il possible de faire via le code java un import des données de la base en ligne puis un export de la bas mariadb vers la base qui elle serait local du moins si c'est possible.
    (de ce que j'ai vu hsqlbd n'a pas la même syntaxe et un import export ne marcherait pas.)
    Merci pour votre aide.

  6. #6
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    Pourquoi n'utilises tu pas un orm par exemple hibernate en créant 2 sessionFactory avec respectivement une datasource (lecture) et une (ecriture).
    1) je récupère mes objets à l'aide de la session hibernate de lecture (Mariadb)
    2) je détache les objets
    3) je les rattache à ma session hibernate d'écriture (hsql)
    4) pour la syncronisation //c'est une idée
    ** une map<Integer, Integer> => map<idHsqldb, idMariaDb> à deleter
    ** de même pour les insert...

    un seul mapping pour 2 drivers de base et du coup tu peux utiliser les save, merge, load...

    ++

  7. #7
    Membre expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Points : 3 938
    Points
    3 938
    Par défaut
    Citation Envoyé par merlin1977 Voir le message
    Bonjour,
    j'ai commencé à faire des tests import de table de mysql vers hsqlbd et là...
    ça fonctionne mais c'est titanesque à mettre en place et surtout ça sera impossible à maintenir par la suite.(plein de vue et le nombre de table à créer et trop important pour que ça soit une bonne solution)
    Du coup plan B.
    Je me dis que le mieux serait d'importer toute la base du serveur vers le poste local.
    la base sur le serveur est mariadb j'ai vu en lignes quelques infos sur une version de mariadb qui pourrait être installé nativement dans l'application mais rien de bien clair :
    Est ce que quelqu'un aurait des infos à ce sujet?
    Est il possible de faire via le code java un import des données de la base en ligne puis un export de la bas mariadb vers la base qui elle serait local du moins si c'est possible.
    (de ce que j'ai vu hsqlbd n'a pas la même syntaxe et un import export ne marcherait pas.)
    Merci pour votre aide.
    Bonjour,
    puisque c'est le serveur mysql qui fait foi, tu peux te faire un petit batch que tu lances avant de te mettre hors connexion, ce script aura pour tâche de faire un dump de ta base de données mysql, ensuite écraser la version locale pour la remplacer. Ton application doit être paramétré pour savoir quand elle tourne Hors Ligne(HL) et En Ligne(EL). Quand elle est EL, il faut activer un traçage de tous les ordres SQL générés sur la base, lesquels seront rejoués sur ta base de données EL.
    Quite à toi de gérer maintenant les confilts de modifications.
    Bon courage

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Avril 2013
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2013
    Messages : 29
    Points : 21
    Points
    21
    Par défaut
    Merci pour votre participation,
    je vais me pencher sur le sujet hibernate, je ne connais pas du tout le sujet.
    l'idée de faire un dump était mon plan B mais le dump de mysql n'est pas compatible avec hsqlbd (apparement il y a des syntaxes différentes) donc je pensais intégrer mariadb en local au lieu de hsqlbd mais je trouve peu d'info sur la méthode pour mettre mariadb en version intégré à l'application.Par ailleurs je me dit qu'une fois la base de donnée en production faire un dump de toute la base pour 20 tables qui m’intéressent et dont seul les dernières lignes de donnée vont m’intéresser ce n'est peut être pas la meilleurs idée....
    Bref il faut que je creuse encore un peu... et que je regarde ce que permet hibernate
    Merci pour votre aide

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/10/2013, 22h23
  2. Page web interactive hors ligne et synchronisation
    Par charles31 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 21/07/2013, 18h08
  3. [AJAX] Version hors ligne et synchronisation
    Par sebastien.bordat dans le forum AJAX
    Réponses: 0
    Dernier message: 28/12/2012, 10h17
  4. hors ligne et synchronisation
    Par Giantrick dans le forum Outils
    Réponses: 3
    Dernier message: 14/11/2007, 18h31

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