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

Java Discussion :

[Conception] gestion tables temporaires bd ?


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut [Conception] gestion tables temporaires bd ?
    Bonjour,

    Je suis désolé je ne sais pas ou poster... entre postgresql/J2EE/et java...
    Le code est en java, donc je poste ici. Le titre n'est surement pas explicite !

    J'ai une application J2EE qui permet à l'utilisateur de travailler à partir de d'une base de données PostgreSql.
    Il me faudrait implémenter une classe permettant de travailler à partir de "données personnelles".

    Après courte réflexion, je me suis lancé dans l'ajout de données temporaires dans une table temp. Cette table recevrait les données à partir d'un fichier puis l'utilisateur travaillerait à partir de cette table (elle contient au minimum 171k lignes et monte jusqu'à 10x 171k).
    Dès qu'un utilisateur envoit de nouvelles données, on supprime les anciennes...
    Seulement cela poserait un problème lors d'accès concurrents. (cela ne devrait pas arriver tous les jours, mais bon)
    X envoit ses données, le commit est réalisé. Y arrive juste après et écrase les données de X ? que se passe t-il si X n'a pas commencé à travailler ?

    Voyez-vous un moyen de poursuivre dans cette voie et de gérer ces accès concurrents ?

    Sinon, je pourrais éventuellement créer une table temp pour chaque session, chaque session bosse dessus, et il faudrait virer la table lorsque la session est détruite.
    Cette 2ème solution est-elle envisageable ?
    Mais dans ce cas... le problème de l'espace disque peut se poser non ?

    Merci d'avance, n'hésitez pas à faire part de vos remarques

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 94
    Points : 113
    Points
    113
    Par défaut
    Juste une idée ...

    Pourquoi pas une table "temporaire" permanante pour tous les utilisateurs avec pour la clé la session en plus ?

    Il faut bien sur prevoir la suppression après le commit pour la session et pas la suppression totale, initialisation eventuelle au demarrage de WEBAPP

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    J'ai une clef qui s'incrémente a chaque ajout de ligne. Donc il n'y a jamais de doublon au niveau de la clef.
    Il suffirait donc de stocker l'id session dans une nouvelle colonne.
    Et on supprimerait en fonction de l'id à la fin de chaque session ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2005
    Messages : 94
    Points : 113
    Points
    113
    Par défaut
    Citation Envoyé par Pwill
    J'ai une clef qui s'incrémente a chaque ajout de ligne. Donc il n'y a jamais de doublon au niveau de la clef.
    Il suffirait donc de stocker l'id session dans une nouvelle colonne.
    Et on supprimerait en fonction de l'id à la fin de chaque session ?
    OUI
    A la fin de session ou apres le traitement, depends de l'appli

    OU

    faire la méthode de sauvegarde et de l’exploitation des données "synchronized" qui empêchera qu'il y à deux utilisateurs qui font commit ?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Citation Envoyé par Stane
    Citation Envoyé par Pwill
    J'ai une clef qui s'incrémente a chaque ajout de ligne. Donc il n'y a jamais de doublon au niveau de la clef.
    Il suffirait donc de stocker l'id session dans une nouvelle colonne.
    Et on supprimerait en fonction de l'id à la fin de chaque session ?
    faire la méthode de sauvegarde et de l’exploitation des données "synchronized" qui empêchera qu'il y à deux utilisateurs qui font commit ?
    Tu pourrais détailler un peu ce que tu entends par la svp ?

    Il se passerait quoi ?
    Plusieurs personnes seraient momentanément en attente et ca peut prendre du temps que l'utilisateur libère l'accès à la table.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    A ta place je regarderai du coté des verrous.
    Voila la page de manuel des verrou pour PostgreSQL :
    http://www.postgresql.org/docs/7.2/s...s.html#AEN9066

    Il suffit de poser un verrou sur la ligne ou tu travailles, et ca ne bloquera la ligne qu en ecriture et pas en lecture.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Merci à toi, je vais me renseigner sur les verrous et voir ce que je peux en faire.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Le chargement de données dans la table va demander du temps selon la connexion... un fichier ferait logiquement mini 17mo de texte brut

    X arrive sur le site et charge ses données dans la table. Etant donné le temps nécessaire il est parti faire autre chose, lorsqu'il revient il remplit le formulaire et à la validation un select est effectué sur la table.

    Il ne faudrait pas qu'entre temps Y ait fini de charger de nouvelles données dans la table.

    Commencer une transaction protégée par un verrou EXCLUSIVE lors de l'insertion des données, terminer la transaction après le select serait une solution ?

  9. #9
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Salut,

    Je ne vois pas bien pourquoi limiter à une seule opération à la fois.

    Comme l'a suggéré Stane je pense que le mieux est de créer une table temporaire dont qui comporte en plus un champ ID_SESSION (ou ID_UTILISATEUR à la rigueur).

    Citation Envoyé par Pwill
    X arrive sur le site et charge ses données dans la table. Etant donné le temps nécessaire il est parti faire autre chose, lorsqu'il revient il remplit le formulaire et à la validation un select est effectué sur la table.
    Jusque là OK : il charge ses données dans la table en mettant son idSession dans ID_SESSION.
    Citation Envoyé par Pwill
    Il ne faudrait pas qu'entre temps Y ait fini de charger de nouvelles données dans la table.
    Ben si, maintenant si Y se pointe avant qu'X ait supprimé ses données, c'est pas grave, Y charge ses données en renseignat la colonne avec son propre idSession.

    Une fois que X (ou Y) a effectué ses action (select * from tableTempo where ID_SESSION = idSession) sur la table temporaire, il les supprime de la table (delete tableTempo where ID_SESSION=idSession).

    Comme ça, X et Y ne se marchent pas sur les piends.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Effectivement, cette solution de Stane me semble assez simple à implémenter.

    Seulement barbu lui aurait fait avec des verrous, ptet c'est moins couteux, seulement je n'ai pas de notions avancées en bd.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    alors si g bien compris ta solution, tu veut faire une table temporaire ou tout le monde pourra mettre ce qu'il veut dedans.
    Donc si chaque personne a 17k lignes à entrer comme le disait Pwill et qu il y a une centaine d'utilisateurs (pqoi pas) ca va faire 1700k ligne dans la table rien que ca.
    Pas mal comme solution surtout au niveau au niveau optimisation d'espace.
    En plus si mes souvenirs sont bon, un insert dans une table pose un verrou sur la table, donc au niveau optimisation temps, ca se pose la aussi ta proposition.
    Mais bon , de mon coté je suis incapable de te dire comme ca qu'elle serai la solution la plus optimale. Ca demande un minimum de temps de reflexion que je n'ai pas. Mais si une idée me vient je te la fait parvenir.
    ++

  12. #12
    NGY
    NGY est déconnecté
    Membre habitué
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 164
    Points
    164
    Par défaut
    Citation Envoyé par barbu0055
    En plus si mes souvenirs sont bon, un insert dans une table pose un verrou sur la table, donc au niveau optimisation temps, ca se pose la aussi ta proposition.
    ??? Excuse-moi de mettre tes souvenirs en doute, mais je vois mal un SGBD digne de ce nom poser un verrou sur toute la table pour un insert !
    C'est d'ailleurs la pose de verrous qui n'est pas terrible au niveau perfs.
    Sinon, pour le reste, je suis bien d'accord que ma méthode n'optimise pas l'espace disque, mais enfin, charger des fichiers de plusieur Mo en BD, ça va forcément bouffer de la place.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 76
    Points : 53
    Points
    53
    Par défaut
    Hmm bon, il faut savoir que ce site ne devrait pas attirer foule de scientifiques... et que je doute qu'il y ait souvent 2 utilisateurs en simultané à travailler chacun depuis leurs données météos. S'il y a 100 visiteurs pas mois, ca sera déjà pas mal il me semble.

    Je me suis planté, en fait le programmme peut tourner avec des données sur une année complète, soit 365 lignes.

    Je devrais donc m'orienter vers la solution de l'id_session

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Conception de tables permettant la gestion des congés
    Par tyjez dans le forum Modélisation
    Réponses: 1
    Dernier message: 19/02/2015, 18h11
  2. [conception] table temporaire ou tableau associatif ?
    Par hartecel dans le forum Langage
    Réponses: 1
    Dernier message: 11/06/2008, 17h31
  3. Un peu de philo - conception de tables pr gestion de prêts
    Par mariobedard dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/02/2005, 22h26
  4. [procédure stockée] table temporaire commençant par #???
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/04/2004, 12h23
  5. Nettoyage de table temporaire
    Par Alain Dionne dans le forum Bases de données
    Réponses: 5
    Dernier message: 28/02/2004, 20h44

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